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

Était-ce utile?

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/

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