J'ai trouvé que les deux travaux suivants:
class Foo():
def a(self):
print "hello"
class Foo(object):
def a(self):
print "hello"
Est-ce que toutes les classes Python doivent étendre un objet? Existe-t-il un problème potentiel avec le fait de ne pas étendre un objet?
Dans Python 2, ne pas hériter de object
créera une classe de style ancien qui, entre autres effets, obligera type
à donner des résultats différents:
>>> class Foo: pass
...
>>> type(Foo())
<type 'instance'>
vs.
>>> class Bar(object): pass
...
>>> type(Bar())
<class '__main__.Bar'>
De plus, les règles pour l'héritage multiple sont différentes d'une manière que je ne vais même pas essayer de résumer ici. Toute la bonne documentation que j'ai vue sur MI décrit des classes de style nouveau.
Enfin, les anciennes classes de style ont disparu dans Python 3 et l'héritage de object
est devenu implicite. Préférez donc toujours les nouvelles classes de style, sauf si vous avez besoin d'une version antérieure de votre logiciel.
Dans Python 3, les classes étendent implicitement object
, que vous le disiez vous-même ou non.
Dans Python 2, il y a des classes ancien-style et nouveau-style . Pour signaler qu'une classe est un nouveau style, vous devez hériter explicitement de object
Si ce n'est pas le cas, l'ancienne implémentation est utilisée.
Vous voulez généralement une classe de nouveau style. Hériter de object
explicitement. Notez que cela s'applique également au code Python 3 qui doit être compatible avec Python 2.
Dans python 3, vous pouvez créer une classe de trois manières différentes. En interne, elles sont toutes égales (voir des exemples). Quelle que soit la manière dont vous créez une classe, toutes les classes de python 3 hérite d'une classe spéciale appelée objet. La classe objet est une classe fondamentale en python et fournit de nombreuses fonctionnalités comme les méthodes de double soulignement, les descripteurs, la méthode super (), la méthode property (), etc.
Exemple 1.
class MyClass:
pass
Exemple 2.
class MyClass():
pass
Exemple 3.
class MyClass(object):
pass
Oui, toutes les classes Python devraient être étendues (ou plutôt une sous-classe, il s'agit de Python ici) objet. Bien que normalement aucun problème grave ne se produira, dans certains cas (comme Ce sera important, cela assurera également une meilleure compatibilité avec Python 3.
en python3, il n'y a pas de différence, mais en python2, ne pas étendre object
vous donne une classe de style ancien; vous souhaitez utiliser une classe de style nouveau par rapport à une classe de style ancien.