Davidox Posted December 15, 2012 at 10:37 PM Report #487307 Posted December 15, 2012 at 10:37 PM 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.
eatg75 Posted December 15, 2012 at 11:35 PM Report #487319 Posted December 15, 2012 at 11:35 PM (edited) 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. Edited December 16, 2012 at 12:10 AM by thoga31 GeSHi 1 Report 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.
Davidox Posted December 16, 2012 at 12:17 AM Author Report #487328 Posted December 16, 2012 at 12:17 AM Sim ajudou, acho que já resolvi o problema 😄 OBRIGADO!!!
Davidox Posted December 17, 2012 at 03:07 AM Author Report #487453 Posted December 17, 2012 at 03:07 AM 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 😉
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now