我有一个代表曲面细分的网格,这是Polygon
类(我制作的一个类)的一组实例。我还有一个Boundary
类,它是表示我正在运行的模拟边界的类(另一个我做过的类)。任何五边形的任何一行都可以有两个Polygon
个对象或一个Polygon
和一个Boundary
对象作为"父母" (我为线类定义的属性)。对象的类型决定了我如何进行某些计算。
因此,简而言之,我需要一种方法来判断特定变量的两个类中的哪一个是实例,其中我已经创建了两个类。当我致电type(parent)
时,我得到:
<type 'instance'>
我该如何判断?
答案 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)。在旧式类中,用户定义类的每个实例都是instance
(Unifying 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