确定python中(非内置)类的类型

时间:2015-02-04 17:21:27

标签: python class instances

我有一个代表曲面细分的网格,这是Polygon类(我制作的一个类)的一组实例。我还有一个Boundary类,它是表示我正在运行的模拟边界的类(另一个我做过的类)。任何五边形的任何一行都可以有两个Polygon个对象或一个Polygon和一个Boundary对象作为"父母" (我为线类定义的属性)。对象的类型决定了我如何进行某些计算。

因此,简而言之,我需要一种方法来判断特定变量的两个类中的哪一个是实例,其中我已经创建了两个类。当我致电type(parent)时,我得到:

 <type 'instance'>

我该如何判断?

3 个答案:

答案 0 :(得分:3)

在Python中执行类型检查的惯用方法是使用isinstance

if isinstance(x, Boundary):
    # x is of type Boundary
elif isinstance(x, Polygon):
    # x is of type Polygon

演示:

>>> class Boundary:
...     pass
...
>>> x = Boundary()
>>> isinstance(x, Boundary)
True
>>>

请注意,执行type(x) is Boundary也可以,但它不会像isinstance那样考虑继承。

答案 1 :(得分:0)

在旧式类中,使用其__class__属性检查实例的类,在新式类type()中可以正常工作(阅读:NewClass Vs Classic Class)。在旧式类中,用户定义类的每个实例都是instanceUnifying types and classes in Python 2.2)类型。

>>> a = A()
>>> class A:
    pass
... 
>>> a = A()
>>> a.__class__
<class __main__.A at 0x7fcce57b1598>
>>> a.__class__ is A
True

在新式课程type(ins)和ins.__class__现在做同样的事情:

>>> class B(object): # Inherit from object to create new-style class
    pass
... 
>>> b = B()
>>> type(b)
<class '__main__.B'>
>>> b.__class__
<class '__main__.B'>

您还可以使用isinstance()检查对象是否是类的实例:

>>> isinstance(a, A)
True
>>> isinstance(b, B)
True

但是使用isinstance进行检查并不意味着该类是实例的确切父级:

>>> class C(B):
    pass
... 
>>> c = C()
>>> isinstance(c, B)
True

答案 2 :(得分:0)

尝试测试对象的__class__属性:

class Class(object):
    def __init__(self):
        pass # Object created

obj = Class()
print obj.__class__ == Class