120 votes

Toutes les classes python devraient-elles étendre l'objet?

J'ai trouvé que les deux travaux suivants:

 class Foo():
    def a(self):
        print "hello"

class Foo(object):
    def a(self):
        print "hello"
 

Toutes les classes python devraient-elles étendre l'objet? Y at-il des problèmes potentiels avec ne pas étendre l'objet?

108voto

larsmans Points 167484

Pas hériter de object permettra de créer un " vieux de la classe de style, qui, entre autres effets, les causes type donner des résultats différents:

>>> class Foo: pass
... 
>>> type(Foo())
<type 'instance'>

vs

>>> class Bar(object): pass
... 
>>> type(Bar())
<class '__main__.Bar'>

Aussi les règles de l'héritage multiple sont différentes dans les moyens que je ne vais même pas essayer de la résumer ici. Tous les bons documents que j'ai vu sur MI décrit la nouvelle-classes de style.

Enfin, de style ancien classes ont disparu en Python 3, et à l'héritage de object est devenu implicite. Donc, préférez toujours de nouvelles classes de style, sauf si vous avez besoin d'en arrière compat avec l'ancien logiciel.

59voto

uʍop ǝpısdn Points 16540

En Python 3 , les classes s'étendent implicitement de object , que vous le disiez vous-même ou non.

En Python 2 , il y a des classes de style ancien et nouveau . Pour signaler qu'une classe est de type nouveau, 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 object explicitement.

2voto

pydsigner Points 1121

Oui, toutes les classes Python doivent être étendues (ou plutôt sous-classes, c'est Python ici), objet. Bien que normalement aucun problème sérieux ne se produise, dans certains cas (comme avec plusieurs arbres d'héritage), cela sera important. Cela garantit également une meilleure compatibilité avec Python 3.

1voto

thkang Points 3692

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X