Existe-t-il un moyen de vérifier si un paramètre contient une classe ou une instance de classe?
-
08-07-2019 - |
Question
Je souhaite que l'encapsuleur my_function puisse recevoir une classe ou une instance de classe au lieu d'écrire deux fonctions différentes:
>>> from module import MyClass
>>> my_function(MyClass)
True
>>> cls_inst = MyClass()
>>> my_function(cls_inst)
True
le problème est que je ne sais pas à l'avance quel type de classes ou d'instances de classes je vais recevoir. Je ne peux donc pas, par exemple, utiliser des fonctions telles que isinstance ...
Comment puis-je vérifier si un paramètre contient une classe ou une instance de classe, de manière générique?
Une idée?
La solution
>>> class A: pass
>>> isinstance(A, type)
True
>>> isinstance(A(), type)
False
Autres conseils
import types
def myfun(maybe_class):
if type(maybe_class) == types.ClassType:
print "It's a class."
else:
print "It's an instance."
Utilisez la fonction type () buitlin.
Exemple:
import avahi
print type(avahi)
<type 'module'>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow