首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python面向对象的子变量更新集父级

python面向对象的子变量更新集父级
EN

Stack Overflow用户
提问于 2019-06-24 17:51:02
回答 1查看 31关注 0票数 0

我有一个包含3个项目的父类。我正在尝试创建一个子类,当被调用时,它会更新父类中的set项。

代码语言:javascript
复制
class NOS:

    def __init__(self):
    self.Bike = 0
    self.car = 0
    self.plane = 0


class buy(NOS):

    def __init__(self, mode):
        NOS.__init__(self)
        self.mode = mode


    def buy_comp(self, value):
        self.mode += value

如果我像下面这样叫它

代码语言:javascript
复制
a = buy('bike')
a.buy_comp(4)

我正在尝试一种自行车等于4的情况。上面的方法不起作用。下面我尝试将buy作为一个函数而不是类来使用,也没有这样做。

代码语言:javascript
复制
def buy(self, mode, value):
    self.mode += value

a= NOS()
a.buy('bike', 5)

这里我得到了错误- AttributeError:'NOS‘对象没有’自行车‘属性

EN

回答 1

Stack Overflow用户

发布于 2019-06-24 18:01:39

在您发布的第一个示例中,您的子类"buy“实际上不是子类,因为它不是从"NOS”继承的。

不是很清楚你想要实现什么。也许这是有帮助的?

代码语言:javascript
复制
class Parent:

    def __init__(self):
        self.foo = "Parent Foo"

class Child(Parent):

    def __init__(self):
        Parent.__init__(self)

    def set_foo(self, new_foo):
        self.foo = new_foo


child = Child()
print(child.foo)
child.set_foo("New Foo")
print(child.foo)

输出:

代码语言:javascript
复制
Parent Foo
New Foo

编辑-哦,我想我现在明白了。也许是这样的东西?

代码语言:javascript
复制
class NOS:

    def __init__(self):
        self.bike = 0
        self.car = 0
        self.plane = 0

class Buy(NOS):

    def __init__(self, item_name):
        NOS.__init__(self)
        self.item_name = item_name

    def buy_comp(self, amount):
        try:
            old_value = getattr(self, self.item_name)
        except NameError:
            # No such item exists
            pass
        else:
            setattr(self, self.item_name, old_value + amount)

a = Buy("bike")
print(a.bike)

a.buy_comp(4)
print(a.bike)

然而,我认为如果你依赖getattr和setattr,肯定会有更好的方法。我有一种感觉,这可能是一个XY problem实例。你能告诉我们更多关于实际用例的信息吗?我相信有一个更优雅的解决方案可以让你从中受益。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56734017

复制
相关文章

相似问题

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