我一直在处理继承,但是对于为什么我的父类无法识别子类的 init 感到困惑。这是我的代码示例,该代码在运行,不运行时不给我任何帮助。
class Coins(object):
def make_change(self, amount):
change = []
for coin in (self._coins):
change.append(amount // coin)
amount = amount - change[-1] * coin
class US_Coins(Coins):
def __init__(self):
self._coins = [50, 25, 10, 5, 1]
class Metric_Coins(Coins):
def __init__(self):
self._coins = [50, 20, 10, 5, 2, 1]
metric = Metric_Coins()
us = US_Coins()
print(us.make_change(73))
print(metric.make_change(73))
coins = Coins()
print(coins.make_change(27))
答案 0 :(得分:1)
您需要在self._coins
类中定义Coins
字段。没有它,函数make_change
将无法执行,因为它会调用此父类(for coin in (self._coins)
)中不存在的字段。
已编辑:为了实现您的目标,您需要在Coins
类内创建一个字段:
class Coins(object):
def __init__self():
self._coins = []
def make_change(self, amount):
change = []
for coin in (self._coins):
change.append(amount // coin)
amount = amount - change[-1] * coin
class US_Coins(Coins):
def __init__(self):
self._coins = [50, 25, 10, 5, 1]
class Metric_Coins(Coins):
def __init__(self):
self._coins = [50, 20, 10, 5, 2, 1]
metric = Metric_Coins()
us = US_Coins()
print(us.make_change(73))
print(metric.make_change(73))
coins = Coins()
print(coins.make_change(27))
现在,您可以在美国和指标上使用make_change
方法进行操作;以及硬币对象。