|
|
|
#1 |
|
Messages: n/a
Hébergeur: |
Bonjour,
Comment tester si une variable est enfant d'une classe ? class MaClass: pass var = MaClass() type(var)==?????(MaClass) -- Franssoa |
|
|
|
#2 |
|
Messages: n/a
Hébergeur: |
Franssoa a écrit :
> Bonjour, > > Comment tester si une variable est enfant d'une classe ? > > class MaClass: > pass > var = MaClass() > > type(var)==?????(MaClass) isinstance(var, MaClass) -- Encolpe DEGOUTE http://encolpe.degoute.free.fr/ Logiciels libres, hockey sur glace et autres activités cérébrales |
|
|
|
#3 |
|
Messages: n/a
Hébergeur: |
Encolpe Degoute a écrit :
>> type(var)==?????(MaClass) > > isinstance(var, MaClass) > hum... merci ! |
|
|
|
#4 |
|
Messages: n/a
Hébergeur: |
Franssoa a écrit :
> Bonjour, > > Comment tester si une variable est enfant d'une classe ? Tu veux dire si un objet est une instance d'une classe ? > class MaClass: NB : sauf besoin de compat avec python < 2.3.x, utilise de préférence des classes 'new-style': class MaClasse(object): > pass > var = MaClass() > > type(var)==?????(MaClass) Les classes Python sont des objets, et dans le cas des classes new-style, type(obj) renvoie l'objet classe (également accessible par obj.__class__). Donc un simple test d'égalité, ou mieux d'identité, fonctione: type(var) is MaClass => True Par contre, ça ne fonctionne (bien sûr) pas pour les sous-classes: class MaSousClasse(MaClasse): pass var2 = MaSousClasse() type(var2) is MaClasse => False Dans ce cas, utiliser isinstance(obj, cls): isinstance(var, MaClasse) => True isinstance(var2, MaClasse) => True Bien, maintenant que les modalités pratiques sont vues, reste les considérations plus philosophiques !-) Python est un langage à typage dynamique, ce qui permet d'avoir très facilement du code générique *à condition* de ne pas restreindre arbitrairement les types acceptables. Bref, dans la grande majorité des cas, il est préférable de ne *pas* faire de vérification de ce genre - soit tu utilises directement l'objet qui t'es passé (s'il ne convient pas, l'appelant aura un beau traceback, mais là ce n'est pas ton problème), soit, si tu veux 'orienter' les choses en fonction d'un type ou d'un autre, tu teste la présence de la fonctionnalité (avec hasattr ou getattr par exemple). Bref, l'usage de isinstance devrait être restreint à quelques cas très spécifiques. HTH |
|
|
|
#5 |
|
Messages: n/a
Hébergeur: |
Bonjour !
Perso, pour savoir si un truc est enfant d'une classe, je regarde sur la photo de (la) classe. Surtout si c'est un vendredi... @+ Michel Claveau |
|
![]() |
| Outils de la discussion | |
|
|