134 votes

Python vérifie les instances des classes

Existe-t-il un moyen de vérifier si un objet est une instance d'une classe ? Pas une instance d'une classe concrète, mais une instance de n'importe quelle classe.

Je peux vérifier qu'un objet n'est pas une classe, pas un module, pas un traceback, etc.

149voto

Matt Alcock Points 1913

isinstance() est votre ami ici. Il renvoie un booléen et peut être utilisé de la manière suivante pour vérifier les types.

if isinstance(obj, (int, long, float, complex)):
    print obj, "is a built-in number type"

if isinstance(obj, MyClass):
    print obj, "is of type MyClass"

J'espère que cela vous aidera.

30voto

Ber Points 10364

Avez-vous essayé isinstance() fonction intégrée ?

Vous pouvez également consulter hasattr(obj, '__class__') pour voir si l'objet a été instancié à partir d'un certain type de classe.

11voto

Rohit Points 1021

Si vous voulez vérifier qu'un objet d'une classe définie par l'utilisateur n'est pas une instance d'un type concret intégré, vous pouvez vérifier s'il possède la propriété suivante __dict__ attribut.

>>> class A:
...     pass
... 
>>> obj = A()
>>> hasattr(obj, '__dict__')
True
>>> hasattr((1,2), '__dict__')
False
>>> hasattr(['a', 'b', 1], '__dict__')
False
>>> hasattr({'a':1, 'b':2}, '__dict__')
False
>>> hasattr({'a', 'b'}, '__dict__')
False
>>> hasattr(2, '__dict__')
False
>>> hasattr('hello', '__dict__')
False
>>> hasattr(2.5, '__dict__')
False
>>> 

Si vous souhaitez vérifier si une instance est un objet de n'importe quelle classe, qu'elle soit définie par l'utilisateur ou concrète, vous pouvez simplement vérifier si elle est une instance de object qui est la classe de base ultime en python.

class A:
    pass
a = A()
isinstance(a, object)
True
isinstance(4, object)
True
isinstance("hello", object)
True
isinstance((1,), object)
True

7voto

N.C. van Gilse Points 143

J'ai eu un problème similaire, mais cette solution s'est avérée efficace pour moi :

def isclass(obj):
    return isinstance(obj, type)

6voto

ellethee Points 29

Je suis en retard. De toute façon, je pense que ça devrait marcher.

is_class = hasattr(obj, '__name__')

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X