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 ce 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 j'ai réalisé que class
c'est un mot-clé en python.
python
reflection
jeeyoungk
la source
la source
inspect.isclass
retournerTrue
si l'objet à inspecter est une instance de classe , utilisezinspect.isclass(type(Myclass()))
type(whatever)
renvoie toujours un objet qui est une classe, donc cette vérification est redondante. Si ce n'était pas le cas, il n'y aurait aucun moyen d'instancierwhatever
et vous ne pourriez donc pas effectuer la vérification en premier lieu.type(snakemake.utils)
retourne<class 'module'>
et pourtantinspect.isclass(snakemake.utils)
retourneFalse
.snakemake.util
qu'un module n'est pas une classe?Le inspect.isclass est probablement la meilleure solution, et il est vraiment facile de voir comment il est réellement mis en œuvre
la source
import types
types.ClassType
n'est plus nécessaire dans Python 3 (et est supprimé).In [8]: class NewStyle(object): ...: pass ...: In [9]: isinstance(NewStyle, (type, types.ClassType)) Out[9]: True
isinstance(object, type)
. Notez que des objets commeint
,list
,str
, etc. sont aussi des cours, de sorte que vous ne pouvez pas l' utiliser pour établir une distinction entre les classes personnalisées définies en Python et intégrés dans les classes définies dans le code C .la source
'class Old:pass' 'isinstance(Old, type) == False'
maisinspect.isclass(Old) == True
.Renvoie
True
ifX
is class etFalse
sinon.la source
S. Lott's answer
, qui a quatre ans de plus.Cette vérification est compatible avec Python 2.x et Python 3.x.
Il s'agit essentiellement d'une fonction wrapper qui effectue la même vérification que dans la réponse andrea_crotti.
Exemple:
la source
classe Foo: est appelée ancienne classe de style et classe X (objet): est appelée nouvelle classe de style.
Check this Quelle est la différence entre les classes de style ancien et nouveau en Python? . Un nouveau style est recommandé. En savoir plus sur " unification des types et des classes "
la source
la manière la plus simple est d'utiliser
inspect.isclass
comme indiqué dans la réponse la plus votée.les détails d'implémentation peuvent être trouvés sur python2 inspect et python3 inspect .
pour la classe new-style:
isinstance(object, type)
pour la classe old-style:
isinstance(object, types.ClassType)
em, pour la classe old-style, il utilise
types.ClassType
, voici le code de types.py :la source
Benjamin Peterson a raison quant à l'utilisation de
inspect.isclass()
pour ce travail. Mais notez que vous pouvez tester si unClass
objet est un spécifiqueClass
, et donc implicitement unClass
, en utilisant la fonction intégrée issubclass . Selon votre cas d'utilisation, cela peut être plus pythonique.Peut ensuite être utilisé comme ceci:
la source
Il existe déjà quelques solutions de travail ici, mais en voici une autre:
la source
types.ClassType
a été supprimé dans Python 3