我有一个小问题让我感到沮丧,我有这部分代码:
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类上逐一声明 有没有办法改进代码?
答案 0 :(得分:0)
你误解了两个概念。
例如,您正尝试同时执行和组合
。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也成为一个对象。”换句话说,以下工作:
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,则上述语法略有不同。
答案 1 :(得分:0)
您正在使用组合和继承的混合。看起来你想专门使用组合:
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