正如你看到的代码,我有一个超类bar_for_foo_mixin()
,我有一个子类myfoo(bar_for_foo_mixin):
,我在超类的bar()
方法中计算一个操作self.Z = X+Y
。
现在我想要将self.z =0更新为在bar()方法中完成的计算,并将该值传递给子类myfoo(bar_for_foo_mixin):
并在子类中使用它。
class bar_for_foo_mixin():
def __init__(self):
self.z = 0
def bar(self, q):
x = 2
y = 8
self.z = x + y + q
class oldfoo():
def __init__(self):
pass
var = bar_for_foo_mixin()
var.bar(10)
class myfoo(bar_for_foo_mixin):
def __init__(self):
super(myfoo, self).__init__()
def hello(self):
print("hello", self.z)
final = myfoo()
final.hello()
代码的结果:
hello 0
预期结果:
hello 20
发布于 2019-03-15 08:02:03
存储在oldfoo.var
类变量中的bar_for_foo_mixin
实例是一个与您在主程序中实例化的myfoo
对象完全不同的实例,因此它们的实例变量z
将不会共享。
如果您希望某个变量在类的所有实例之间共享,则应将其改为类变量,并将专用于更新类变量的方法(如bar_for_foo_mixin.bar
)改为类方法:
class bar_for_foo_mixin():
z = 0
@classmethod
def bar(cls, q):
x = 2
y = 8
cls.z = x + y + q
class oldfoo():
def __init__(self):
pass
var = bar_for_foo_mixin()
var.bar(10)
class myfoo(bar_for_foo_mixin):
def __init__(self):
super(myfoo, self).__init__()
def hello(self):
print("hello", self.z)
final = myfoo()
final.hello()
这将输出以下内容:
hello 20
发布于 2019-03-15 07:46:14
您甚至没有通过新的final
变量调用bar
方法:
class bar_for_foo_mixin():
def __init__(self):
self.z = 0
def bar(self, q):
x = 2
y = 8
self.z = x + y + q
class myfoo(bar_for_foo_mixin):
def __init__(self):
super(myfoo, self).__init__()
def hello(self):
print("hello", self.z)
final = myfoo()
final.bar(10) # <== call it to take effect
final.hello() # ==> hello 20
https://stackoverflow.com/questions/55173589
复制相似问题