确定 python 中的一个(非内置)class 的类型
Determine the type of a (not built in) class in python
我有一个代表镶嵌的网格,它是 Polygon
class(我制作的 class)的一组实例。我还有一个 Boundary
class,它是 class 代表模拟的边界,我是 运行(我做的另一个 class)。任何五边形的任何一行都可以有两个 Polygon
对象或一个 Polygon
和一个 Boundary
对象作为 "parents" (我为行定义的属性 class).对象的类型决定了我如何进行某些计算。
所以,简而言之,我需要一种方法来判断一个特定变量是两个 classes 中的哪一个的实例,我在其中创建了两个 classes。当我调用 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
那样考虑继承。
在旧式 classes 中,您使用 __class__
属性检查实例的 class,在新式 classes type()
中将正常工作(阅读:NewClass Vs Classic Class). In old-style classes every instance of user-defined class was of type 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
在新式 classes 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()
检查对象是否是 class:
的实例
>>> isinstance(a, A)
True
>>> isinstance(b, B)
True
但是使用 isinstance
检查这个并不意味着 class 是实例的确切父级:
>>> 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
我有一个代表镶嵌的网格,它是 Polygon
class(我制作的 class)的一组实例。我还有一个 Boundary
class,它是 class 代表模拟的边界,我是 运行(我做的另一个 class)。任何五边形的任何一行都可以有两个 Polygon
对象或一个 Polygon
和一个 Boundary
对象作为 "parents" (我为行定义的属性 class).对象的类型决定了我如何进行某些计算。
所以,简而言之,我需要一种方法来判断一个特定变量是两个 classes 中的哪一个的实例,我在其中创建了两个 classes。当我调用 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
那样考虑继承。
在旧式 classes 中,您使用 __class__
属性检查实例的 class,在新式 classes type()
中将正常工作(阅读:NewClass Vs Classic Class). In old-style classes every instance of user-defined class was of type 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
在新式 classes 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()
检查对象是否是 class:
>>> isinstance(a, A)
True
>>> isinstance(b, B)
True
但是使用 isinstance
检查这个并不意味着 class 是实例的确切父级:
>>> 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