Enfant de Class ?

Le
Franssoa
Bonjour,

Comment tester si une variable est enfant d'une classe ?

class MaClass:
pass
var = MaClass()

type(var)==?????(MaClass)

--
Franssoa
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Encolpe Degoute
Le #655793
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

Franssoa
Le #655792

type(var)==?????(MaClass)


isinstance(var, MaClass)

hum...

merci !


Bruno Desthuilliers
Le #655791
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

Méta-MCI \(MVP\)
Le #655786
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
Publicité
Poster une réponse
Anonyme