Eu descobri que os dois trabalhos a seguir:
class Foo():
def a(self):
print "hello"
class Foo(object):
def a(self):
print "hello"
Todas as classes Python devem estender o objeto? Existem problemas em potencial com a não extensão do objeto?
python
inheritance
Kara
fonte
fonte
class Foo():
eclass Foo:
? Quando observo, tanto o trabalho em Python 3.Respostas:
No Python 2, não herdar de
object
criará uma classe de estilo antigo que, entre outros efeitos, causatype
resultados diferentes:vs.
Além disso, as regras para herança múltipla são diferentes de maneiras que nem tentarei resumir aqui. Toda a boa documentação que eu vi sobre o MI descreve novas classes de estilo.
Finalmente, as classes de estilo antigo desapareceram no Python 3 e a herança de
object
tornou-se implícita. Portanto, sempre prefira novas classes de estilo, a menos que você precise de uma compatibilidade com o software antigo.fonte
No Python 3, as classes se estendem
object
implicitamente, independentemente de você dizer ou não.No Python 2, existem classes de estilo antigo e novo . Para sinalizar que uma classe é de novo estilo, você deve herdar explicitamente de
object
. Caso contrário, a implementação de estilo antigo é usada.Você geralmente deseja uma classe de novo estilo. Herdar de
object
explicitamente. Observe que isso também se aplica ao código Python 3 que visa ser compatível com o Python 2.fonte
No python 3, você pode criar uma classe de três maneiras diferentes e internamente todas são iguais (veja exemplos). Não importa como você cria uma classe, todas as classes no python 3 herdam da classe especial chamada object . O objeto de classe é uma classe fundamental em python e fornece muitas funcionalidades, como métodos de sublinhado duplo, descritores, método super (), método property () etc.
Exemplo 1.
Exemplo 2
Exemplo 3
fonte
object
faz referência ao built-inobject
. Se precisarmos levar em consideração que qualquer identificador interno do CPython pode ser substituído, mal podemos fazer alguma afirmação sobre o modelo de dados. Pode-se argumentar seriamente questr
nem sempre aceita uma string como argumento porque se pode atribuirbuiltins.str = None
?Sim, todas as classes Python devem estender (ou melhor, subclasse, aqui é Python aqui) o objeto. Embora normalmente não ocorram problemas sérios, em alguns casos (como em várias árvores de herança), isso será importante. Isso também garante uma melhor compatibilidade com o Python 3.
fonte
Como outras respostas abordaram, a herança do Python 3 do objeto é implícita. Mas eles não afirmam o que você deve fazer e o que é convenção.
Todos os exemplos de documentação do Python 3 usam o estilo a seguir, que é convencional, então sugiro que você siga isso para qualquer código futuro no Python 3.
Fonte: https://docs.python.org/3/tutorial/classes.html#class-objects
Exemplo de citação:
Outra citação:
fonte
em python3 não há diferença, mas em python2 não estender
object
fornece classes de estilo antigo; você gostaria de usar uma classe de novo estilo em vez de uma classe de estilo antigo.fonte