python OOP-子变量更新集父

时间:2019-06-24 09:51:02

标签: python class

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

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

如果我这样称呼

a = buy('bike')
a.buy_comp(4)

我正在尝试达到自行车等于4的情况。以上方法无效。我尝试使用buy作为函数而不是类的以下内容也都没有。

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

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

这是我收到的错误-AttributeError:“ NOS”对象没有属性“ bike”

1 个答案:

答案 0 :(得分:0)

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

不确定要达到的目标。也许这有用吗?

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)

输出:

Parent Foo
New Foo

编辑-哦,我想我明白了。像这样的东西?

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的实例。您能告诉我们更多有关实际用例的信息吗?我相信您可以从中受益。