Types et classes en Python
Je suis un peu confus sur les types et les classes en Python. Pour, par exemple, à la suite de REPL conversation me confond:
>>> class A: pass
...
>>> a = A()
>>> type(a)
<type 'instance'>
>>> a.__class__
<class __main__.A at 0xb770756c>
>>> type([])
<type 'list'>
>>> [].__class__
<type 'list'>
>>> type(list)
<type 'type'>
>>> list.__class__
<type 'type'>
>>> type(A)
<type 'classobj'>
>>> A.__class__
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: class A has no attribute '__class__'
- Pourquoi le type et la classe pour intégré les choses (par exemple, la liste ici) le même, mais différent pour l'utilisateur classes/types?
- N'est pas à chaque classe une instance d'une autre classe (comme la Classe en Java)? Pourquoi pas
__class__
définis par l'utilisateur classes?
Toute explication complémentaire de la lecture qui permet de clarifier ce comportement serait très apprécié. TIA.
source d'informationauteur sasuke
Vous devez vous connecter pour publier un commentaire.
Vous êtes à la rencontre de la différence de comportement pour les nouvelles classes de style versus classique des classes. Pour en savoir plus lire: Python, Modèle De Données. Spécifiquement lire la section sur les classes et la différence entre le nouveau style classique et classes.
Essayez de taper la commande suivante dans votre REPL:
et vous verrez que vous obtenez des résultats différents. Ici, vous avez affaire à la différence entre le nouveau style et vieux style de classes. À l'aide de Python 2.6.1 voici ce que j'obtiens:
qui vous dit que les listes sont de nouvelles classes de style et pas les anciennes classes de style. Nous pouvons jouer avec des choses à l'aide de
list
ainsi:même que notre
class B(object): pass
résultat. Et aussiqui vous dit au sujet de l'instance de l'objet et pas la définition.
C'est "Hystorical raisons". Ou possible "Histerical". C'est tous les fixes en Python 3:
En Python 3.0, classe définie par l'utilisateur les objets sont des instances de l'objet nommé type,
qui est elle-même une classe.
• Dans la version 2.6 de Python, nouveau style de classes héritent de l'objet, qui est une sous-classe de type;
• classique les classes sont des instances de type et ne sont pas créés à partir d'une classe.