【问题标题】:Class inheritance, how to improve?类继承,如何改进?
【发布时间】:2017-07-26 00:59:50
【问题描述】:
我有一个小问题让我很沮丧,我有这部分代码:
class A(object):
def __init__(self):
self.variable = "Hello World!!!"
class B(A):
def __init__(self):
self.A = A()
self.inherited = self.A.variable
问题是我在 A 类上有一堆变量,我不想在 B 类上一个一个实例化和声明
有没有办法改进代码?
【问题讨论】:
标签:
python
class
inheritance
【解决方案1】:
您正在使用组合和继承的组合。看来您想专门使用合成:
class A(Object):
def __init__(self):
self.c = C()
self.e = E()
class B(Object):
def __init__(self):
self.c = C()
self.d = D()
其中C、D 和E 是将变量和方法组合在一起的组件。现在 A 和 B 只共享 C 的组件。你应该寻找更完整的组合教程
编辑:实际上只是仔细检查它看起来你只是对实例化超类变量感到困惑。其他答案通过super 正确解决了这个问题
【解决方案2】:
你误解了两个概念。
例如,您尝试同时进行组合和继承。
class A(Object):
def __init__(self):
self.variable = "Hello World!!!"
class B(A):
def __init__(self):
self.A = A()
self.inherited = self.A.variable
当你这样做时,你是在说,“让 B 也成为 A 对象。”换句话说,以下工作:
class A(object): # can omit this (object) in python3
def __init__(self):
self.value_from_a = 'Im from A!'
class B(A):
def __init__(self):
super().__init__()
self.value_from_b = 'im a bbbbb!'
b = B()
print(b.value_from_a)
print(b.value_from_b)
因此,在您的情况下,这样做的方法是不要尝试将 A 既作为 B 的基础,又作为 B 的一部分。
请注意,如果您使用的是 Python2,上述语法会略有不同。