首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使超类方法的局部变量可用于另一个类调用超类的子类

如何使超类方法的局部变量可用于另一个类调用超类的子类
EN

Stack Overflow用户
提问于 2019-03-15 07:41:31
回答 2查看 15关注 0票数 1

正如你看到的代码,我有一个超类bar_for_foo_mixin(),我有一个子类myfoo(bar_for_foo_mixin):,我在超类的bar()方法中计算一个操作self.Z = X+Y

现在我想要将self.z =0更新为在bar()方法中完成的计算,并将该值传递给子类myfoo(bar_for_foo_mixin):并在子类中使用它。

代码语言:javascript
复制
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()

代码的结果:

代码语言:javascript
复制
hello 0

预期结果:

代码语言:javascript
复制
hello 20
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-15 08:02:03

存储在oldfoo.var类变量中的bar_for_foo_mixin实例是一个与您在主程序中实例化的myfoo对象完全不同的实例,因此它们的实例变量z将不会共享。

如果您希望某个变量在类的所有实例之间共享,则应将其改为类变量,并将专用于更新类变量的方法(如bar_for_foo_mixin.bar )改为类方法:

代码语言:javascript
复制
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()

这将输出以下内容:

代码语言:javascript
复制
hello 20
票数 1
EN

Stack Overflow用户

发布于 2019-03-15 07:46:14

您甚至没有通过新的final变量调用bar方法:

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55173589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档