Есть ли способ проверить, является ли объект экземпляром класса? Не экземпляр конкретного класса, а экземпляр любого класса.
Я могу проверить, что объект не является классом, не модулем, не отслеживанием и т.д., Но меня интересует простое решение.
Есть ли способ проверить, является ли объект экземпляром класса? Не экземпляр конкретного класса, а экземпляр любого класса.
Я могу проверить, что объект не является классом, не модулем, не отслеживанием и т.д., Но меня интересует простое решение.
isinstance()
- ваш друг здесь. Он возвращает логическое значение и может использоваться следующими способами для проверки типов.
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"
Надеюсь, что это поможет.
Вы пробовали isinstance()
встроенную функцию?
Вы также можете посмотреть hasattr(obj, '__class__')
, чтобы узнать, был ли объект создан из некоторого типа класса.
Я опаздываю. в любом случае подумайте, что это должно сработать.
is_class = hasattr(obj, '__name__')
class test(object): pass
type(test)
возвращает
<type 'type'>
instance = test()
type(instance)
возвращает
<class '__main__.test'>
Итак, один способ рассказать им обособленно.
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
Немного сложно сказать, чего вы хотите, но, возможно, inspect.isclass(val)
- это то, что вы ищете?
или
import inspect
inspect.isclass(myclass)
Вот трюк грязи.
if str(type(this_object)) == "<type 'instance'>":
print "yes it is"
else:
print "no it isn't"
У меня была похожая проблема, на этот раз у меня получилось:
def isclass(obj):
return isinstance(obj, type)
Я думаю, что я довольно поздно на этот раз, и Infact боролся с той же проблемой. Так вот, что сработало для меня.
>>> 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
>>>
Я проверил это на Python 3 и 2.7.
Пришлось иметь дело с чем-то подобным в последнее время.
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
попробуй это:
hasattr(obj, '__dict__') and not callable(obj)