Je me demandais comment vérifier si une variable est une classe (pas une instance!) Ou non.
J'ai essayé d'utiliser la fonction isinstance(object, class_or_type_or_Tuple)
pour le faire, mais je ne sais pas quel type aurait une classe.
Par exemple, dans le code suivant
class Foo: pass
isinstance(Foo, **???**) # i want to make this return True.
J'ai essayé de remplacer "class
" par ??? , mais je me suis rendu compte que class
est un mot clé en python.
Encore mieux: utilisez la fonction inspect.isclass
.
>>> import inspect
>>> class X(object):
... pass
...
>>> inspect.isclass(X)
True
>>> x = X()
>>> isinstance(x, X)
True
>>> y = 25
>>> isinstance(y, X)
False
Inspect.isclass est probablement la meilleure solution, et il est vraiment facile de voir comment elle est réellement mise en œuvre
def isclass(object):
"""Return true if the object is a class.
Class objects provide these attributes:
__doc__ documentation string
__module__ name of module in which this class was defined"""
return isinstance(object, (type, types.ClassType))
>>> class X(object):
... pass
...
>>> type(X)
<type 'type'>
>>> isinstance(X,type)
True
isinstance(X, type)
Retourne True
si X
est class et False
sinon.
la classe Foo: s'appelle l'ancienne classe de style et la classe X (objet): s'appelle la nouvelle classe de style.
Vérifiez ceci Quelle est la différence entre l'ancien style et les nouvelles classes de style en Python? . Un nouveau style est recommandé. Lisez à propos de " unifiant les types et les classes "
le moyen le plus simple consiste à utiliser inspect.isclass
tel que posté dans la réponse la plus votée.
les détails d’implémentation sont disponibles sur python2 inspect et python3 inspect .
pour la classe new-style: isinstance(object, type)
pour classe à l’ancienne: isinstance(object, types.ClassType)
em, pour la classe old-style, il utilise types.ClassType
, voici le code de types.py :
class _C:
def _m(self): pass
ClassType = type(_C)
Cette vérification est compatible avec Python 2.x et Python 3.x.
import six
isinstance(obj, six.class_types)
Il s’agit d’une fonction de wrapper qui effectue le même contrôle que dans andrea_crotti answer.
Exemple:
>>> import datetime
>>> isinstance(datetime.date, six.class_types)
>>> True
>>> isinstance(datetime.date.min, six.class_types)
>>> False