测试一个对象是否是另一个实例类型的子类

美联社

我有以下代码:

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)

现在我要检查,如果obj2obj3是的是的子类的实例obj1,以及简单的子类的Item

这是我的理解,我知道我可以使用isinstance()来查找obj2is是否Sub而且我知道我可以用issubclass(Sub, Item)但是,让我说我不知道​​什么课obj2

我尝试使用,issubclass(type(obj2),Item)但是那是行不通的,因为type()返回了一个我不太了解其工作原理的单独对象。这只是一个问题,尽管我认为该问题的答案将帮助我解决其他一些问题。

另外,我尝试使用某些特殊属性来执行此操作,例如,__class__但我也不知道如何执行该操作。

马丁·彼得斯(Martijn Pieters)

您需要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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何测试一个对象是否是另一个对象

来自分类Dev

测试一个对象是否依赖于另一个对象

来自分类Dev

我如何测试某个特定对象是否完全在另一个对象内?

来自分类Dev

对象是否面对另一个

来自分类Dev

您可以检查一个类型(不是实例)是否是另一个类型的子类吗?

来自分类Dev

如何知道一个对象是否包含另一个对象

来自分类Dev

如何检查一个对象是否包含另一个对象,例如

来自分类Dev

如何快速测试TypeMirror是否为另一个的子类型

来自分类Dev

实例化一个对象的类型取决于另一个对象的类型

来自分类Dev

通过传递关系检查一个对象是否等于另一个对象

来自分类Dev

如何检查一个对象是否嵌套在另一个对象的属性中作为属性?

来自分类Dev

如何使用SDO_JOIN查找一个对象是否在另一个对象内

来自分类Dev

添加额外的字段以查找对象是否与另一个对象相关

来自分类Dev

如何检查表示数字的对象是否大于另一个对象?

来自分类Dev

检查对象是否包含JavaScript中另一个对象的任何元素

来自分类Dev

如何检查嵌套对象是否是另一个不使用 jQuery 的对象的后代

来自分类Dev

如何检查一个列表中的对象是否在另一个嵌套列表中?

来自分类Dev

从另一个对象创建一个对象是更好的做法

来自分类Dev

是否可以在另一个子类中声明子类对象?

来自分类Dev

将一个对象的方法传递给另一个对象是否会使第一个对象保持活动状态?

来自分类Dev

引用相同对象类型的另一个对象实例的类对象属性

来自分类Dev

另一个对象内部的引用对象实例

来自分类Dev

如果模板参数是另一个模板的某个实例,则类型特征测试

来自分类Dev

尝试学习泛型时,是否有办法查看一个泛型对象是否大于另一个泛型对象?

来自分类Dev

检查一个类是否是另一个类的子类

来自分类Dev

从另一个实例创建新对象

来自分类Dev

实例化另一个对象

来自分类Dev

在没有实例化的另一个对象旁边生成一个对象

来自分类Dev

如何在动画过程中检查对象是否击中了另一个对象。

Related 相关文章

  1. 1

    如何测试一个对象是否是另一个对象

  2. 2

    测试一个对象是否依赖于另一个对象

  3. 3

    我如何测试某个特定对象是否完全在另一个对象内?

  4. 4

    对象是否面对另一个

  5. 5

    您可以检查一个类型(不是实例)是否是另一个类型的子类吗?

  6. 6

    如何知道一个对象是否包含另一个对象

  7. 7

    如何检查一个对象是否包含另一个对象,例如

  8. 8

    如何快速测试TypeMirror是否为另一个的子类型

  9. 9

    实例化一个对象的类型取决于另一个对象的类型

  10. 10

    通过传递关系检查一个对象是否等于另一个对象

  11. 11

    如何检查一个对象是否嵌套在另一个对象的属性中作为属性?

  12. 12

    如何使用SDO_JOIN查找一个对象是否在另一个对象内

  13. 13

    添加额外的字段以查找对象是否与另一个对象相关

  14. 14

    如何检查表示数字的对象是否大于另一个对象?

  15. 15

    检查对象是否包含JavaScript中另一个对象的任何元素

  16. 16

    如何检查嵌套对象是否是另一个不使用 jQuery 的对象的后代

  17. 17

    如何检查一个列表中的对象是否在另一个嵌套列表中?

  18. 18

    从另一个对象创建一个对象是更好的做法

  19. 19

    是否可以在另一个子类中声明子类对象?

  20. 20

    将一个对象的方法传递给另一个对象是否会使第一个对象保持活动状态?

  21. 21

    引用相同对象类型的另一个对象实例的类对象属性

  22. 22

    另一个对象内部的引用对象实例

  23. 23

    如果模板参数是另一个模板的某个实例,则类型特征测试

  24. 24

    尝试学习泛型时,是否有办法查看一个泛型对象是否大于另一个泛型对象?

  25. 25

    检查一个类是否是另一个类的子类

  26. 26

    从另一个实例创建新对象

  27. 27

    实例化另一个对象

  28. 28

    在没有实例化的另一个对象旁边生成一个对象

  29. 29

    如何在动画过程中检查对象是否击中了另一个对象。

热门标签

归档