我有一个包含3个项目的父类。我正在尝试创建一个子类,当被调用时,它会更新父类中的set项。
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‘对象没有’自行车‘属性
发布于 2019-06-24 18:01:39
在您发布的第一个示例中,您的子类"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实例。你能告诉我们更多关于实际用例的信息吗?我相信有一个更优雅的解决方案可以让你从中受益。
https://stackoverflow.com/questions/56734017
复制相似问题