Ir para o conteúdo
Davidox

[Resolvido] Questão sobre Classes

Mensagens Recomendadas

Davidox

Boas. Estou neste momento a aprender python na cadeira de programaçao, e tenho um trabalho entre maos. a questão é a seguinte, o prof. forneceu uma programa com uma funçao que testa se as minhas funcoes estão correctas. Agora gostava de saber se é possivel executar um comando deste genero:

mapa().mapa_poe_objecto_em(posicao(12, 3), espaco).mapa_altura()

sendo que mapa é uma classe, e depois o mapa_poe_objecto_em é uma funçao dentro dessa classe, tal como o mapa_altura. é possivel executar assim uma funçao depois da outra? nao deveria dar só para fazer mapa().mapa_poe_objecto_em(..) e mapa().mapa_altura(), é possivel fazer isto de pôr um após o outro? é que na funçao que o meu prof forneceu a funçao faz um após o outro, o que retorna-me sempre um NonType error... a função do prof. faz basicamente isto:

Teste 22 - TAI mapa - Falhou!

mapa().mapa_poe_objecto_em(posicao(12, 3), espaco).mapa_altura() retornou:

erro de execucao

Resultado pretendido:

> 12

é possivel fazer isto ou será erro do programa do prof? :S é que se fizer em separado funciona, mas quando faço juntas não dá... Agradecia uma resposta o mais rapido possivel, Obrigado.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
eatg75

Ao invocares mapa() tas criar uma nova instancia de mapa, se mapa_poe_objecto_em() for um metodo da instancia mapa e nao da classe ate aqui funciona sem problemas, e para a chamada de mapa_altura() funcionar e necerario que o mapa_poe_objecto_em() retorna um objecto que saiba

chamar mapa_altura().

Para ser um bocado mais pratico ve este exemplo:

class Foo(object):
   def does_foo(self):
       pass

class Bar(object):
   def does_bar(self)
       foo = Foo()
       # fazes alguma coisa
       return foo

# esta chamada e valida
Bar().does_bar().does_foo()

Espero ter ajudado.

Editado por thoga31
GeSHi
  • Voto 1

Victarion seized the dusky woman by the wrist and pulled her to him.

Victarion - She will do it. Go pray to your red god. Light your fire, and tell me what you see.

Moqorro's dark eyes seemed to shine.

Moqorro - I see dragons.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Davidox

Surgiu-me outra dúvida no decorrer do trabalho, tenho o meu programa deste genero:

obj_em={}
mapa_dois=[0]
mapa_linha=[0]
mapa_coluna=[0]
class mapa:           
   def __init__(self):
       self.mapa=[]
       self.obj_em=obj_em
       self.mapa_dois=mapa_dois
       self.mapa_linha=mapa_linha
       self.mapa_coluna=mapa_coluna

   def mapa_poe_objecto_em(self,posicao,objecto):
       self.obj_em[(posicao.posicao_linha(),posicao.posicao_coluna())]=objecto
       self.mapa_linha[0]=posicao.posicao_linha()
       self.mapa_coluna[0]=posicao.posicao_coluna()
       return mapa()

   def mapa_objecto_em(self,posicao):
       if (posicao.posicao_linha(),posicao.posicao_coluna()) in self.obj_em:
           return self.obj_em[(posicao.posicao_linha(),posicao.posicao_coluna())]
       else:
           return desconhecido

basicamente o mapa_poe_objecto_em poe um dado objecto numa dada posicao. Agora imaginando que coloco o objecto A na posicao (2,2), para "guardar" esse objecto defini o nome "obj_em" como um dicionário fora da classe porque se a definisse na funcao __init__ como self.obj_em={}, sempre que iria pôr um novo objecto numa posicao diferente, por exemplo o objecto B na posicao (3,3), o dicionario obj_em voltava a ficar vazio, por causa da funcao _init_ e acabava com o dicionario apenas com o objecto B. Gostava de saber se há maneira de, usando apenas nomes definidos dentro da classe, de "actualizar" as funcoes em _init_, do genero, depois de por o objecto A na posicao (2,2), este fica guardado e se de seguida fizer para por o objecto B na (3,3), ficam os dois guardados (A e B). Eu criei os nomes fora da classe para isso, mas gostava de saber se há outra maneira para o fazer dentro da classe, por uma questão de estilo de programação, para ficar mais apresentável vá, que os profs são esquisitinhos x)

Não sei se expressei a minha dúvida correctamente, mas se puderem ajudar agradecia.

Obrigado ;)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.