我有以下代码:
class Item:
def __init__(self,a):
self.a=a
class Sub(Item):
def __init__(self,a,b):
self.b=b
Item.__init__(self,a)
class SubSub(Sub):
def __init__(self,a,b,c):
self.c=c
Sub.__init__(self,a,b)
obj1=Item(1)
obj2=Sub(1,2)
obj3=SubSub(1,2,3)
现在我要检查,如果obj2
和obj3
是的是的子类的实例obj1
,以及简单的子类的Item
。
这是我的理解,我知道我可以使用isinstance()
来查找obj2
is是否Sub
。而且我知道我可以用issubclass(Sub, Item)
。但是,让我说我不知道什么课obj2
。
我尝试使用,issubclass(type(obj2),Item)
但是那是行不通的,因为type()
返回了一个我不太了解其工作原理的单独对象。这只是一个问题,尽管我认为该问题的答案将帮助我解决其他一些问题。
另外,我尝试使用某些特殊属性来执行此操作,例如,__class__
但我也不知道如何执行该操作。
您需要obj
使用type()
函数来提取类型:
isinstance(obj2, type(obj1))
请注意,第二个参数是类,第一个参数是要测试的实例。type()
在这里返回实际的类对象,而不是任何单独的对象。
issubclass()
适用于您的用例:
issubclass(type(obj2), Item)
演示:
>>> class Item:
... def __init__(self,a):
... self.a=a
...
>>> class Sub(Item):
... def __init__(self,a,b):
... self.b=b
... Item.__init__(self,a)
...
>>> class SubSub(Sub):
... def __init__(self,a,b,c):
... self.c=c
... Sub.__init__(self,a,b)
...
>>> obj1=Item(1)
>>> obj2=Sub(1,2)
>>> obj3=SubSub(1,2,3)
>>> isinstance(obj2, type(obj1))
True
>>> issubclass(type(obj2), Item)
True
请注意,如果您在此处重新定义类,则现有实例将不会更新以指向新的类对象。如果type(obj2)
对您不起作用,则意味着用于生成该类的类与您现在正在测试的类不同。
您可以通过检验您的假设来检验这种情况。验证类和实例仍处于同步状态,例如:
>>> type(obj1) is Item
True
>>> type(obj2) is Sub
True
>>> type(obj3) is SubSub
True
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句