Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
magician

FAQ de Python lol

Recommended Posts

magician

Bom tenho andado a estudar a linguagem, desenvolver algumas coisas e frequentemente defronto-me com coisas que não encontro resposta lol por isso cá vai xD

1 - class X(object) é o mesmo que apenas class X, eu sei que a primeira herda a classe object mas todas as classes não o fazem automaticamente ?

2 - variáveis tipo __a ou __a__ ou até mesmo _a tambem já encontrei alguns métodos assim é só estética ou tem algum efeito real ?

3 - Interfaces na parte de OO não ?? Encontrei um PEP que fala nelas mas tirando isso mais nada :\

4 - As classes tem de ser todas publicas ? bem como os métodos e variáveis ??

Tinha mais umas mas agora não me lembro lol depois meto xD

Já agora se poderem responder ás minhas questões, são coisas provavelmente triviais mas que não sei como procurar.


I haven’t lost my mind; it’s backed up on DVD somewhere!

Share this post


Link to post
Share on other sites
pedrotuga

1 - Sim é o mesmo, há quem goste mais de escrever X(object) porque acham que é mais coerente ou por outros motivos de preferencia.

2 - É uma convenção, são supostamente privados mas em rigor são nomes como outros quaisquer. O object model, esse tal falado no ponto 1, tem métodos com nomes desse tipo que por isso têm um significado especial.

3 - Não sei, provavelmente não existe. Uso simplesmente o extend de uma classe base.

4 - Sim.

Share this post


Link to post
Share on other sites
fnds

3 - Interfaces na parte de OO não ?? Encontrei um PEP que fala nelas mas tirando isso mais nada :\

Não percebi esta pergunta, ás outras o pedro já te respondeu.

Share this post


Link to post
Share on other sites
Betovsky

3 - Interfaces na parte de OO não ?? Encontrei um PEP que fala nelas mas tirando isso mais nada :\

Não sei se existe ou não, mas interfaces numa linguagem dinamicamente tipada não faz muito sentido.

"Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !"

Sign on a computer system consultant's desk

Share this post


Link to post
Share on other sites
magician

Não sei se existe ou não, mas interfaces numa linguagem dinamicamente tipada não faz muito sentido.

Talvez mas continuas a precisar de abstracção, embora se consiga isso com herança não é a mesma coisa...


I haven’t lost my mind; it’s backed up on DVD somewhere!

Share this post


Link to post
Share on other sites
magician

Relativamente ao ponto 1 acho que estão errados lol vou explicar pk xD

>>> class X(object):
...     pass
...
>>> class Y:
...     pass
...
>>> dir (X)
['__class__', '__delattr__', '__dict__', '__doc__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__', '__weakref__']
>>> dir (Y)
['__doc__', '__module__']
>>>

Como podem ver á coisas muito diferentes :\ já agora podiam me explicar isto ai ai este python lol


I haven’t lost my mind; it’s backed up on DVD somewhere!

Share this post


Link to post
Share on other sites
pedrotuga

Acho que apesar da aparente diferença, acaba por ser o mesmo. Afinal de contas esses são nomes de métodos para tu implementares.

Olha este exemplo:

>>> class gen():
...     def __init__(self):
...         self.a="hi!"
... 
>>> b = gen()
>>> b.a
'hi!'
>>> 

O método __init__() passou a existir a a ser chamado normalmente aquando da inicialização do objecto.

De notar que em python os métodos pertecem aos objectos e não às classes.

Share this post


Link to post
Share on other sites
fnds

O object é o pai de todos os tipos, normalmente ele é herdado quando se quer criar um tipo novo, é algo complexo eu ainda não percebi bem isto (a criação de tipos)...

Vê este artigo http://www.cafepy.com/article/python_types_and_objects/python_types_and_objects.html

Edit:

>>> class a:
pass

>>> type(a)
<type 'classobj'>
>>> class b(object):
pass

>>> type(b)
<type 'type'>
>>> type(list)
<type 'type'>

Share this post


Link to post
Share on other sites
djthyrax

Nada melhor do que recorrer à ajuda do interpretador:

>>> help(object)
Help on class object in module __builtin__:

class object
|  The most base type

>>> 

Que é como quem diz, a class object é tipo A metaclass da linguagem.

Em relação à pergunta 3, não percebi, e tens a resposta à 4 na pergunta 2, mas tens uma ressalva à pergunta 2 na reposta da mesma que o pedrotuga deu :D


Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Share this post


Link to post
Share on other sites
magician

Acho que apesar da aparente diferença, acaba por ser o mesmo. Afinal de contas esses são nomes de métodos para tu implementares.

Olha este exemplo:

>>> class gen():
...     def __init__(self):
...         self.a="hi!"
... 
>>> b = gen()
>>> b.a
'hi!'
>>> 

O método __init__() passou a existir a a ser chamado normalmente aquando da inicialização do objecto.

De notar que em python os métodos pertecem aos objectos e não às classes.

Claro que se escreves o método ele vai aparecer lá mas isso é muito diferente de overriding do método. Por exemplo no Java quando crias uma classe nova ela automaticamente herda a classe Object que é a classe Base do Java. Aqui pelos visto isso não acontece!!

Nada melhor do que recorrer à ajuda do interpretador:

>>> help(object)
Help on class object in module __builtin__:

class object
|  The most base type

>>> 

Que é como quem diz, a class object é tipo A metaclass da linguagem.

Em relação à pergunta 3, não percebi, e tens a resposta à 4 na pergunta 2, mas tens uma ressalva à pergunta 2 na reposta da mesma que o pedrotuga deu :D

Fiquei na mesma lolol xD


I haven’t lost my mind; it’s backed up on DVD somewhere!

Share this post


Link to post
Share on other sites
Betovsky

Talvez mas continuas a precisar de abstracção, embora se consiga isso com herança não é a mesma coisa...

Não percebi, abstracção em que sentido?

"Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !"

Sign on a computer system consultant's desk

Share this post


Link to post
Share on other sites
magician

Abstracção talvez não tenha sido o melhor termo, mas por exemplo queres que determinada classe tenha de implementar determinados métodos como fazes isso sem interfaces ??? A herança não resolve isso pelo menos não vejo como :\


I haven’t lost my mind; it’s backed up on DVD somewhere!

Share this post


Link to post
Share on other sites
Betovsky

Abstracção talvez não tenha sido o melhor termo, mas por exemplo queres que determinada classe tenha de implementar determinados métodos como fazes isso sem interfaces ??? A herança não resolve isso pelo menos não vejo como :\

Pois mas penso que isso não seja possível. Sendo tipada dinamicamente, os tipos só irão ser conhecidos durante a execução e não na altura da compilação. Para além disso tens o duck typing, o que torna o uso de interfaces desnecessário. É possível que haja uma forma de forçar durante a escrita do código que uma dada classe implemente certos métodos, mas desconheço tal e acredito que não haja.

Mesmo se houver penso que tal não garanta que durante a execução a classe ainda esteja válida (tipos dinâmicos).


"Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !"

Sign on a computer system consultant's desk

Share this post


Link to post
Share on other sites
magician

Então como posso eu "obrigar" a que determinada classe implemente determinados métodos sem classes abstratas nem interfaces :O ? Pá até gosto de python estás coisas é que me matam lol


I haven’t lost my mind; it’s backed up on DVD somewhere!

Share this post


Link to post
Share on other sites
pedrotuga

Então como posso eu "obrigar" a que determinada classe implemente determinados métodos sem classes abstratas nem interfaces :O ? Pá até gosto de python estás coisas é que me matam lol

Não podes, o que se costuma fazer é usar as convenções tipo a dos underscores. Quem herda as tuas classes e faz m... é que tem a responsabilidade do que faz.

Eu sei que isto faz um pouco de confusão aos progradores de Java ou C#, a mim tambem me fez confusão quando ouvi pela primeira vez falar em interfaces.

Share this post


Link to post
Share on other sites
magician

Ai este POO do python mata-me lolol a propósito aquilo do class x (object) parece que tem qq a ver com class new-style do python, não consegui bem perceber ao certo mas parece que temos mesmo de fazer a herança porque o python não a faz automaticamente a classe object :\


I haven’t lost my mind; it’s backed up on DVD somewhere!

Share this post


Link to post
Share on other sites
pedrotuga

Ai este POO do python mata-me lolol a propósito aquilo do class x (object) parece que tem qq a ver com class new-style do python, não consegui bem perceber ao certo mas parece que temos mesmo de fazer a herança porque o python não a faz automaticamente a classe object :\

Não sei se te apercebeste, mas esses métodos todos que te aparecem quando herdas explicitamente o objecto base, não contêm absolutamente nada, nem os consegues chamar enquanto não os implementares manualmente.

Share this post


Link to post
Share on other sites
djthyrax

Ai este POO do python mata-me lolol a propósito aquilo do class x (object) parece que tem qq a ver com class new-style do python, não consegui bem perceber ao certo mas parece que temos mesmo de fazer a herança porque o python não a faz automaticamente a classe object :\

? Tens de fazer se quiseres fazer coisas como:

class XPTO:
    metodos todos

print XPTO(whatever)+9


Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

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.