【问题标题】:Accessing an class attribute from subclass (Python)?从子类(Python)访问类属性?
【发布时间】:2019-04-02 21:43:34
【问题描述】:

这是我的代码格式:

class A(object):
    def __init__(self, x, other):
        self.other = other
        self.x = x
class B(A):
    def __init__(self):
        # place code here
    def something_else(self):
        return self.x["foo"]

x 是我想调用的对象,稍后带有下标(在something_else 中。

我只想从父类继承x。 重要的是other不被继承,所以super().__init__不适合。

我已尝试通过在class A 中创建一个函数来解决此问题:

def x(self):
    return self.x

所以我可以在class B 中调用super().x(),但这也不起作用。

我曾尝试直接拨打super.x["foo"],但不起作用。

我怎样才能在我的情况下实现我想要的? 谢谢!

【问题讨论】:

  • 如果你想继承一些东西,你的类层次结构是错误的。
  • 不过,在我继承整个 x 函数的情况下(参见第二个代码块),下标它并不能按预期工作。
  • 当你下标一个函数时你期望得到什么?它不是可下标的对象。
  • 为什么other被继承是个问题?不想用,就不能直接忽略吗?
  • @Prune 这正是我的问题,我想在 A.__init__() 中定义 self.x 下标。

标签: python class inheritance subclass


【解决方案1】:

变量并不总是必须在__init__函数中注册,如果你想要x来自类A,在A中有一个方法:

def set_x(self, x):
    self.x = x
    # other stuff

您仍然可以从类B 调用set_x,因为所有函数都是继承的,您可以从那里实例化属性x,而无需从A 调用__init__

【讨论】:

  • 我不完全确定我们是否在同一页面上,您能详细说明一下吗?当我设置A 对象时,我想直接在其中传递x,因为A.__init__() 中的其余代码也使用x
  • 好吧,既然你不能在A中使用__init__函数,就在A中有一个不同的函数来设置x,然后在你实例化一个B的实例之后,您可以从您的B.__init__() 调用self.set_x(),因为该函数是继承的。
猜你喜欢
  • 2013-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-16
  • 2012-06-19
  • 2017-12-16
  • 2013-12-12
相关资源
最近更新 更多