Question

Tous les Python Encastrements sont sous-classes de object et je viens dans de nombreuses classes définies par l'utilisateur qui sont trop. Pourquoi? Quel est le but de la object de classe? Il est juste une classe vide, non?

Était-ce utile?

La solution

En bref, il définit des poneys magiques libres.

long, Python 2.2 et utilisé précédemment "classes de style ancien". Ils étaient une mise en oeuvre particulière de classes, et ils avaient quelques limites (par exemple, vous ne pouvez pas sous-classe types BUILTIN). Le correctif de c'était de créer un nouveau style de classe. Mais, en faisant cela impliquerait des changements incompatibles en arrière. Donc, pour vous assurer que le code qui est écrit pour les classes de style ancien fonctionnent, mais la classe object a été créé pour agir en tant que superclasse pour toutes les classes de nouveau style. Ainsi, en Python 2.X, class Foo: pass va créer une classe de style ancien et class Foo(object): pass va créer une nouvelle classe de style.

En plus, consultez le types Unifier et les classes en Python 2.2 .

Et, en général, il est une bonne idée de prendre l'habitude de faire toutes vos classes nouveau style, parce que certaines choses (le décorateur @property est celui qui vient à l'esprit) ne fonctionnent pas avec les classes de style ancien.

Autres conseils

Réponse courte: subclassing object fait effectivement nouveau style classe (notez que cela est inutile puisque automatique 3.x Python)

Pour la différence entre les classes de new style et les classes de old style: voir ce stackoverflow question . Pour l'histoire complète: voir cette belle writeup sur les types Python et des objets

Il a à voir avec le « nouveau style » des classes. Vous pouvez en lire davantage ici: http://docs.python.org/ tutorial / classes.html # héritage multiple et aussi ici: http://docs.python.org/reference/datamodel.html#new-style-and-classic-classes

Utilisation des classes nouveau style vous permettra d'utiliser "les plus récentes de Python, des fonctions polyvalentes comme __slots__, descripteurs, propriétés et __getattribute __ ()."

Oui, mais elle marque la classe en tant que nouveau style classe . Nouveaux cours développés devraient utiliser la base de object parce qu'il coûte peu et l'avenir des preuves de votre code.

La version courte est que les classes classiques, qui n'a pas besoin de superclasse, avaient des limites qui ne pouvaient être contournées sans casser beaucoup de vieux code. Ils ont donc créé le concept de classes nouveau style qui sous-classe de object, et maintenant vous pouvez faire des choses cool comme définir les propriétés, et subclassing dict n'est plus un exercice de bugs étranges et la douleur.

Les détails sont dans la section 3.3 de la documentation Python: New- le style et les classes classiques.

Python 2.2 a introduit "nouvelles classes de style" qui avait un certain nombre de fonctionnalités supplémentaires par rapport aux anciennes classes de style qui n'a pas l'objet sous-classe. objet était la manière sous- classes choisie pour indiquer que votre classe devrait être une nouvelle classe de style, pas un style ancien un.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top