【问题标题】:Python: inheritance of class data (if superclass object has been already initialized)Python:类数据的继承(如果超类对象已经初始化)
【发布时间】:2013-10-24 19:18:05
【问题描述】:

我面临无法继承超类属性值的问题。我已经调用了超类构造函数,现在尝试检查继承的值。

class base:
    def __init__(self, x):
        self.x = x
        print(self.x)

class derive(base):
    def __init__(self):
        print(self.x + 1)


print("base class: ")
b = base(1)                           <-- Creating superclass instance 
print("derive class: ")
d = derived()                         <-- Inheriting. Failure.

为什么我不能这样做?我应该将底层对象显式传递给继承对象以获得 x 属性吗?

【问题讨论】:

  • 你需要从派生类中调用基类__init__。关于这个问题有很多以前的问题。
  • @shx2:这个问题的答案是 Python 2 特有的。

标签: python oop inheritance


【解决方案1】:

bd 不相关; b 完全是基类的一个独立实例。

如果您想调用被覆盖的初始化程序 (__init__),请使用 super() proxy object 访问它:

class derive(base):
    def __init__(self):
        super().__init__(1)
        print(self.x + 1)

请注意,您仍然需要将参数传递给父类的初始化程序。在上面的示例中,我为父初始值设定项的x 参数传入了一个常量值 1。

请注意,我在这里使用了 Python 3 特定的语法;不带参数的super() 在 Python 2 中不起作用,您还需要使用 object 作为 base 类的父类以使其成为新型类。

【讨论】:

  • @zero323:OP 正在使用print() 函数;出于这个原因,我坚持使用 Python 3。
  • 有时我觉得自己是唯一一个使用 print() 和 Python 2.x 的人
  • @zero323:不要,除非你使用from __future__ import print_function
猜你喜欢
  • 2019-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多