繁体   English   中英

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

[英]Determine the type of a (not built in) class in python

我有一个网格表示细分,这是Polygon类(我制作的一个类)的一组实例。 我也有一个Boundary类,它是代表我正在运行的模拟边界的类(我制作的另一个类)。 五边形的任何一条线都可以具有两个Polygon对象,也可以具有一个PolygonBoundary对象作为“父对象”(我为该线类定义的属性)。 对象的类型决定了我如何进行某些计算。

因此,简而言之,我需要一种方法来判断特定变量是两个类中的哪个类的实例,我在两个类中都创建了该类。 当我调用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM