如何与自定义类的类型进行比较

时间:2017-08-14 04:37:09

标签: python

说我有一个自定义类:

class MyClass():
    pass

我想测试这是否是MyClass的一个实例。这可以在没有转换成字符串的丑陋混乱的情况下完成吗?

str(type(MyClass())) == "<class '__main__.MyClass'>"

2 个答案:

答案 0 :(得分:4)

  

这可以在没有转换成字符串的丑陋混乱的情况下完成吗?

是。使用内置函数isinstance。来自文档:

  

如果object参数是classinfo参数的实例,或者是(直接,间接或虚拟)子类的实例,则返回true。如果object不是给定类型的对象,则该函数始终返回false。

>>> class MyClass():
...     pass
... 
>>> isinstance(MyClass(), MyClass)
True

您也可以使用type这样做:

>>> type(MyClass) == type(MyClass)
True

但不建议这样做,因为type无法考虑子类。 From the documentation for type

  

建议使用isinstance()内置函数来测试对象的类型,因为它需要考虑子类。

答案 1 :(得分:0)

在实例上使用__class__.__name__,如下所示:

>>> class MyClass():
...    pass
...
>>> i = MyClass()
>>> i.__class__.__name__
'MyClass'

或者,isinstance如果您有权访问父类:

>>> isinstance(i, MyClass)
True

由于类的任何对象也是任何父类的实例,isinstance也将为所有父类返回True

>>> class MyOtherClass(MyClass):
...    pass
...
>>> q = MyOtherClass()
>>> isinstance(q, MyClass)
True
>>> isinstance(q, MyOtherClass)
True
>>> isinstance(q, object)
True

然而:

>>> q.__class__.__name__
'MyOtherClass'