Quel est le but de sous-classer la classe “objet” en Python?
Toutes les fonctions intégrées de Python sont des sous-classes de object
et j'ai rencontré beaucoup de classes définies par l'utilisateur qui sont trop. Pourquoi? Quel est le but de la classe object
? C'est juste une classe vide, non?
Vous devez vous connecter pour publier un commentaire.
En bref, elle libère magique poneys.
En long, Python 2.2 et les versions antérieures utilisaient des "vieux style de classes". Ils étaient une mise en oeuvre particulière de classes, et ils ont eu quelques limitations (par exemple, vous ne pouviez pas sous-classe builtin types). Le correctif de ce était de créer un nouveau style de classe. Mais, cela entraînerait des arrière-incompatible changements. Donc, assurez-vous que le code qui est écrit pour les anciennes classes de style fonctionnera toujours, la
object
classe a été créée pour agir en tant que super-classe pour tous les nouveaux-classes de style.Donc, en Python 2.X,
class Foo: pass
va créer un " vieux de la classe de style etclass Foo(object): pass
va créer une nouvelle classe de style.En plus, voir Guido de Unification des types et des classes en Python 2.2.
Et, en général, c'est une bonne idée de prendre l'habitude de faire de toutes vos classes de new-style, parce que certaines choses (le
@property
décorateur est celui qui me vient à l'esprit) ne fonctionne pas avec les vieux-classes de style.object
est inutile.À réponse courte: - classement
object
effectivement fait un nouveau style classe (à noter que c'est inutile puisque automatique en Python 3.x)Pour la différence entre
new style
classes etold style
classes: voir cette question stackoverflow. Pour l'histoire complète: voir cette belle writeup sur Python les Types et les Objets.Il a à faire avec le "nouveau style" de classes. Vous pouvez en lire plus à ce sujet ici: http://docs.python.org/tutorial/classes.html#multiple-inheritance et aussi ici: http://docs.python.org/reference/datamodel.html#new-style-and-classic-classes
À l'aide de la nouvelle-classes de style vous permettra d'utiliser "Python les plus récents, polyvalent fonctionnalités comme l' __slots__, les descripteurs, les propriétés, et __ _ _ getattribute__()."
Droit, mais c'est la classe comme un nouveau style classe. Nouvellement développé les classes à utiliser le
object
de base, car il en coûte peu et avenir-les preuves de votre code.La version courte est que le classique des classes, ce qui n'a pas besoin d'une super-classe, a des limitations qui ne pouvait pas être contourné sans casser beaucoup de vieux code. Ils ont donc créé le concept de la nouvelle-classes de style qui sous-classe de
object
, et maintenant vous pouvez faire des choses aussi cool que de définir des propriétés, et de sous-classementdict
n'est plus un exercice de la douleur et des bugs étranges.Les détails sont dans la section 3.3 de Python docs: New-style classique et des classes.
Python 2.2 introduit de nouvelles classes de style" qui a eu un certain nombre de fonctionnalités supplémentaires par rapport à l'ancien style de classes qui n'ont pas de sous-classe de l'objet. Les sous-classes d'objets a été choisie de manière à indiquer que votre classe doit être un nouveau style de classe, pas un vieux style.