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