Est-il possible de vérifier si l'objet est une instance d'une classe? Pas une instance d'une classe concrète, mais une instance d'une classe.
Je peux vérifier qu'un objet n'est pas une classe, pas un module, pas une traceback, etc.
isinstance()
est votre ami ici. Il retourne un booléen et peut être utilisé des manières suivantes 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 t'aides.
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 type de classe.
Je suis en retard. de toute façon pense que cela devrait marcher.
is_class = hasattr(obj, '__name__')
class test(object): pass
type(test)
résultats
<type 'type'>
instance = test()
type(instance)
résultats
<class '__main__.test'>
C'est donc une façon de les différencier.
def is_instance(obj):
import inspect, types
if not hasattr(obj, '__dict__'):
return False
if inspect.isroutine(obj):
return False
if type(obj) == types.TypeType: # alternatively inspect.isclass(obj)
# class type
return False
else:
return True
Voici un tour de la terre.
if str(type(this_object)) == "<type 'instance'>":
print "yes it is"
else:
print "no it isn't"
Je pense que je suis assez en retard sur celui-ci et enfait luttait avec le même problème Alors voici ce qui a fonctionné pour moi.
>>> 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
>>>
J'ai testé cela sur Python 3 et 2.7.
C'est un peu difficile de dire ce que vous voulez, mais peut-être que inspect.isclass(val)
est ce que vous cherchez?
J'ai eu un problème similaire à ce qui s'est avéré fonctionner pour moi:
def isclass(obj):
return isinstance(obj, type)
ou
import inspect
inspect.isclass(myclass)
Oui. En conséquence, vous pouvez utiliser hasattr(obj, '__dict__')
ou obj is not callable(obj)
.
A dû faire face à quelque chose de similaire récemment.
import inspect
class A:
pass
def func():
pass
instance_a = A()
def is_object(obj):
return inspect.isclass(type(obj)) and not type(obj) == type
is_object(A) # False
is_object(func) # False
is_object(instance_a) # True