为什么python中的继承要求父类显式继承对象?

不会

以下是我的代码的两个版本:

不工作的人

class A:
    def __init__(self):
        print "I am A "

class B:
    def __init__(self):
        print "I am B "

class C(A, B):
    def __init__(self):
        super(C, self).__init__()

c = C()

这引发了异常:

    super(C, self).__init__()  
TypeError: must be type, not classobj  

工作版本

class A(object):
    def __init__(self):
         print "I am A "

class B:
    def __init__(self):
         print "I am B "

class C(A, B):
    def __init__(self):
         super(C, self).__init__()

c = C()

如果父类之一显式继承了object,则没有异常,并且一切正常。任何解释,为什么?

通过上述工作,它将显示“我是A”,而不显示“我是B”,这意味着它仅初始化Class A,而不初始化ClassB。如何在子类中初始化多个父类?

卡斯拉文

super()仅适用于新型类(任何从object继承的类)。因此您不能将class object传递给super

超级有两种典型的用例。在具有单一继承的类层次结构中,super可以用于引用父类而无需显式命名它们,从而使代码更具可维护性。这种用法与其他编程语言中super的用法非常相似。

第二个用例是在动态执行环境中支持协作式多重继承。该用例是Python特有的,在静态编译语言或仅支持单继承的语言中找不到。这样就可以在多个基类实现相同方法的情况下实现“菱形图”。良好的设计要求该方法在每种情况下都具有相同的调用签名(因为调用的顺序是在运行时确定的,因为该顺序可以适应类层次结构中的更改,并且该顺序可以包含在运行时之前未知的同级类)。

典型的超类调用如下所示:

class C(B):
    def method(self, arg):
        super(C, self).method(arg)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么Python类继承对象?

来自分类Dev

无需显式初始化父类的虚拟继承

来自分类Dev

在此示例中,为什么子类不继承python中父类的方法?

来自分类Dev

为什么可以从python中的类对象继承私有函数

来自分类Dev

在python3.x中显式继承'type'实现元类

来自分类Dev

具有新对象的父类,以及子类中的新对象,对象/方法继承Python

来自分类Dev

子类中的Python类继承自父类中的类

来自分类Dev

为什么在Java继承期间在父类中声明的数组在子类中不可见?

来自分类Dev

选择从Python继承的父类

来自分类Dev

python中的类继承

来自分类Dev

比较继承自父类但存储在父类向量中的类的对象类型

来自分类Dev

为什么继承了“对象”的python类在其__init__方法中将其称为“超级”?

来自分类Dev

为什么我更喜欢元类而不是Python中超类的继承

来自分类Dev

子类可以从 Python 中的父类继承实例变量吗?

来自分类Dev

C ++继承-为什么调用父方法?

来自分类Dev

如何计算显式创建的继承树中特定类的实例数?

来自分类Dev

从抽象基类继承时,为什么__slots__在Python 2和3中的行为不同

来自分类Dev

继承父类

来自分类Dev

在继承中强制转换对象,为什么要输出?

来自分类Dev

Python:调用继承的父类方法失败

来自分类Dev

Python AttributeError:来自父函数的类继承

来自分类Dev

Python AttributeError:来自父函数的类继承

来自分类Dev

父类中的Scala继承默认参数

来自分类Dev

C ++中的继承(父类和子类)

来自分类Dev

在 Rspec 中测试子类继承的父类。

来自分类Dev

是否有必要从对象显式继承?

来自分类Dev

为什么最终类不能被继承而最终方法可以被继承?

来自分类Dev

为什么在Python 2.7中定义一个类而不继承一个对象不会导致__mro__方法?

来自分类Dev

Python中的简单类继承

Related 相关文章

  1. 1

    为什么Python类继承对象?

  2. 2

    无需显式初始化父类的虚拟继承

  3. 3

    在此示例中,为什么子类不继承python中父类的方法?

  4. 4

    为什么可以从python中的类对象继承私有函数

  5. 5

    在python3.x中显式继承'type'实现元类

  6. 6

    具有新对象的父类,以及子类中的新对象,对象/方法继承Python

  7. 7

    子类中的Python类继承自父类中的类

  8. 8

    为什么在Java继承期间在父类中声明的数组在子类中不可见?

  9. 9

    选择从Python继承的父类

  10. 10

    python中的类继承

  11. 11

    比较继承自父类但存储在父类向量中的类的对象类型

  12. 12

    为什么继承了“对象”的python类在其__init__方法中将其称为“超级”?

  13. 13

    为什么我更喜欢元类而不是Python中超类的继承

  14. 14

    子类可以从 Python 中的父类继承实例变量吗?

  15. 15

    C ++继承-为什么调用父方法?

  16. 16

    如何计算显式创建的继承树中特定类的实例数?

  17. 17

    从抽象基类继承时,为什么__slots__在Python 2和3中的行为不同

  18. 18

    继承父类

  19. 19

    在继承中强制转换对象,为什么要输出?

  20. 20

    Python:调用继承的父类方法失败

  21. 21

    Python AttributeError:来自父函数的类继承

  22. 22

    Python AttributeError:来自父函数的类继承

  23. 23

    父类中的Scala继承默认参数

  24. 24

    C ++中的继承(父类和子类)

  25. 25

    在 Rspec 中测试子类继承的父类。

  26. 26

    是否有必要从对象显式继承?

  27. 27

    为什么最终类不能被继承而最终方法可以被继承?

  28. 28

    为什么在Python 2.7中定义一个类而不继承一个对象不会导致__mro__方法?

  29. 29

    Python中的简单类继承

热门标签

归档