我有这个密码:
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
是否是Sub
。我知道我可以用issubclass(Sub, Item)
。但假设我不知道什么是类obj2
。
我试过使用issubclass(type(obj2),Item)
但这不起作用,因为type()
返回了一个单独的对象,我并不真正理解它的工作原理。这只是一个问题,尽管我认为这个问题的答案将帮助我解决我所面临的其他一些问题。
此外,我还尝试使用一些特殊属性来执行此操作,例如__class__
,但我也不知道如何执行此操作。
您需要使用
type()
函数提取obj
的类型:注意第二个参数是类,第一个是要测试的实例。
type()
返回的是实际的类对象,而不是任何单独的对象。issubclass()
对于您的用例来说非常有用:演示:
注意,如果在这里重新定义了类,那么现有实例将被更新为指向新的类对象。如果
type(obj2)
对您不起作用,那么这意味着用于生成它的类与您现在测试的类不同。您可以通过测试您的假设来测试这种情况;验证类和实例是否仍然同步,例如:
相关问题 更多 >
编程相关推荐