Python检查类的实例

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python检查类的实例相关的知识,希望对你有一定的参考价值。

有没有办法检查对象是否是类的实例?不是具体类的实例,而是任何类的实例。

我可以检查一个对象不是一个类,而不是一个模块,而不是一个追溯等,但我对一个简单的解决方案感兴趣。

答案

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"

希望这可以帮助。

另一答案

最近不得不处理类似的事情。

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__')obj is not callable(obj)

另一答案

你有没有尝试过内置功能的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
另一答案

我有一个类似的问题,结果是为我工作:

def isclass(obj):
    return isinstance(obj, type)
另一答案

我觉得我在这个问题上已经相当晚了,事实上我正在努力解决同样的问题。所以这对我有用。

>>> 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上测试了这个。

另一答案

告诉你想要什么有点难,但也许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"

以上是关于Python检查类的实例的主要内容,如果未能解决你的问题,请参考以下文章

有条件地导入 python 类的片段

Python——检查对象是不是是某个模块中任何类的实例

如何检查类的给定实例是不是属于python中的主类? [复制]

创建片段而不从 java 代码实例化它

如何检查对象是不是是新型用户定义类的实例?

Python 向 Postman 请求代码片段