Подтвердить что ты не робот

Python проверяет экземпляры классов

Есть ли способ проверить, является ли объект экземпляром класса? Не экземпляр конкретного класса, а экземпляр любого класса.

Я могу проверить, что объект не является классом, не модулем, не отслеживанием и т.д., Но меня интересует простое решение.

4b9b3361

Ответ 1

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"

Надеюсь, что это поможет.

Ответ 2

Вы пробовали isinstance() встроенную функцию?

Вы также можете посмотреть hasattr(obj, '__class__'), чтобы узнать, был ли объект создан из некоторого типа класса.

Ответ 3

Я опаздываю. в любом случае подумайте, что это должно сработать.

is_class = hasattr(obj, '__name__')

Ответ 4

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

Ответ 5

Немного сложно сказать, чего вы хотите, но, возможно, inspect.isclass(val) - это то, что вы ищете?

Ответ 6

или

import inspect
inspect.isclass(myclass)

Ответ 7

Вот трюк грязи.

if str(type(this_object)) == "<type 'instance'>":
    print "yes it is"
else:
    print "no it isn't"

Ответ 8

У меня была похожая проблема, на этот раз у меня получилось:

def isclass(obj):
    return isinstance(obj, type)

Ответ 9

Я думаю, что я довольно поздно на этот раз, и 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.

Ответ 10

Пришлось иметь дело с чем-то подобным в последнее время.

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

Ответ 11

попробуй это:

hasattr(obj, '__dict__') and not callable(obj)