type de classe en python
-
28-09-2019 - |
Question
pourquoi, si je fais:
class C(): pass
type(C())
Je suis: <type 'instance'>
, mais si je fais:
class C(object): pass
type(c())
Je suis: <class '__main__.c'>
La première est pas très userfull
La solution
Regardez la différence entre l'ancienne et les classes de nouveau style. Les premiers sont la valeur par défaut, et celui-ci hérite explicitement de l'objet.
Tous les objets de style ancien ont été mis en œuvre avec l'instance de type intégré. Le fait qu'ils sont toujours la valeur par défaut et de l'instance «leurs restes de type est le résultat de précautions de compatibilité rétro.
est extrait de la documentation python (http://docs.python.org/reference/datamodel.html)
3.3. Nouvelles classes de style classiques et les classes et les instances sont disponibles en deux saveurs: style ancien (ou classique) et nouveau style.
Jusqu'à Python 2.1, les classes de style ancien étaient la seule saveur à la disposition du utilisateur. Le concept de classe (ancienne) est sans rapport avec le concept de type: si x est une instance d'un style ancien classe, puis x. classe désigne la classe de x, mais le type (x) est toujours . Cela reflète la fait que toutes les instances de style ancien, indépendamment de leur classe, sont mis en œuvre avec un seul intégré le type, par exemple appelé.
de nouvelles classes de style ont été introduites dans Python 2.2 pour unifier les classes et types. Une nouvelle classe de style est ni plus ni moins d'un type défini par l'utilisateur. Si x est une instance d'une classe nouveau style, puis Type (x) est généralement la même que x>. class (bien que ce n'est pas garantie - une nouvelle classe de style instance est autorisé à remplacer le valeur renvoyée pour x. classe ).
La principale motivation pour l'introduction cours nouveau style est de fournir un modèle objet unifié avec un plein méta-modèle. Il a également un certain nombre de avantages pratiques, comme la capacité sous-classe la plus intégrée dans les types, ou l'introduction de « descripteurs », qui permettent de propriétés calculées.
Pour des raisons de compatibilité, les classes sont encore ancien style par défaut. Nouveau style classes sont créées en spécifiant une autre classe nouveau style (à savoir un type) en tant que classe parente, ou le « haut niveau type » objet si aucun autre parent est nécessaire. Le comportement d'un nouveau style les classes diffère de celle de l'ancien style cours dans un certain nombre d'importantes détails en plus de quel type () résultats. Certains de ces changements sont fondamentale pour le nouveau modèle objet, comme la façon dont les méthodes de spéciales sont invoqué. D'autres sont « fixe » qui pourrait ne pas être mis en œuvre avant de préoccupations de compatibilité, comme le Procédé de commande de résolution en cas de héritage multiple.
Bien que ce manuel vise à fournir une couverture complète de Python la mécanique de classe, il peut encore être manque dans certaines régions en matière de la couverture des nouvelles classes de style. S'il te plait regarde http://www.python.org/doc/newstyle/ pour les sources d'informations supplémentaires.
Classes de style ancien sont supprimés en Python 3.0, ne laissant que la sémantique de nouveau style classes.of cours nouveau style.
Autres conseils
Honnêtement, je ne pense pas qu'une réponse courte est en ordre ici. Je vous conseille de commencer la lecture sur l'unification du type de Python / classes nouveau style ici: http://www.python.org/doc/newstyle/