PHWinfo banniere

Titres
PORTAIL ANNUAIRE ARTICLES COMPARATEUR HÉBERGEURS DEVIS FORUMS RÉDUCTEUR D'URL
Précédent   PHWinfo > Autres forums > Forum Programmation & Conception > fr.comp.lang.python > Enfant de Class ?
S'inscrire FAQ Membres Recherche Messages du jour Marquer les forums comme lus
Enfant de Class ?

Réponse
 
LinkBack Outils de la discussion
Vieux 25/10/2007, 16h25   #1
Franssoa
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Enfant de Class ?

Bonjour,

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

class MaClass:
pass
var = MaClass()

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

--
Franssoa
  Réponse avec citation
Vieux 25/10/2007, 16h42   #2
Encolpe Degoute
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Enfant de Class ?

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
  Réponse avec citation
Vieux 25/10/2007, 16h45   #3
Franssoa
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Enfant de Class ?

Encolpe Degoute a écrit :

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

>
> isinstance(var, MaClass)
>

hum...
merci !
  Réponse avec citation
Vieux 25/10/2007, 16h56   #4
Bruno Desthuilliers
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Enfant de Class ?

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



  Réponse avec citation
Vieux 26/10/2007, 12h34   #5
Méta-MCI \(MVP\)
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Enfant de Class ?

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



  Réponse avec citation
Réponse


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +1. Il est actuellement 01h36.


Édité par : vBulletin® version 3.7.2
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0 RC5 Tous droits réservés.
Version française #16 par l'association vBulletin francophone
PHWinfo est un site Éducation Sans Frontières
Ad Management by RedTyger
©Tous droits réservés par les parties respectives
Page generated in 0,15687 seconds with 13 queries