Davidox 0 Denunciar mensagem Publicado 15 de Dezembro de 2012 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 21 Denunciar mensagem Publicado 15 de Dezembro de 2012 (editado) 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 16 de Dezembro de 2012 por thoga31 GeSHi 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 0 Denunciar mensagem Publicado 16 de Dezembro de 2012 Sim ajudou, acho que já resolvi o problema OBRIGADO!!! Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites
Davidox 0 Denunciar mensagem Publicado 17 de Dezembro de 2012 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