Existe-t-il un moyen de vérifier si un paramètre contient une classe ou une instance de classe?

StackOverflow https://stackoverflow.com/questions/1638657

  •  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?

Était-ce utile?

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
scroll top