[英]Determine the type of a (not built in) class in python
我有一个网格表示细分,这是Polygon
类(我制作的一个类)的一组实例。 我也有一个Boundary
类,它是代表我正在运行的模拟边界的类(我制作的另一个类)。 五边形的任何一条线都可以具有两个Polygon
对象,也可以具有一个Polygon
和Boundary
对象作为“父对象”(我为该线类定义的属性)。 对象的类型决定了我如何进行某些计算。
因此,简而言之,我需要一种方法来判断特定变量是两个类中的哪个类的实例,我在两个类中都创建了该类。 当我调用type(parent)
,我得到:
<type 'instance'>
我应该如何确定呢?
在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
那样考虑继承。
在旧类中,您可以使用实例的__class__
属性检查实例的类,在新类中, type()
可以正常工作(阅读: NewClass与Classic Class )。 在老式类用户定义的类的每一个实例是类型的instance
( 统一类型和在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
进行isinstance
并不意味着该类是实例的确切父级:
>>> class C(B):
pass
...
>>> c = C()
>>> isinstance(c, B)
True
尝试测试对象的__class__
属性:
class Class(object):
def __init__(self):
pass # Object created
obj = Class()
print obj.__class__ == Class
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.