Jump to content
Davidox

[Resolvido] Questão sobre Classes

Recommended Posts

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.

Share this post


Link to post
Share on other 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.

Edited by thoga31
GeSHi
  • Vote 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.

Share this post


Link to post
Share on other 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 ;)

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.