Python: родительский класс не распознает __init__ своих подклассов - PullRequest
0 голосов
/ 20 ноября 2018

Я работал с наследованием, но я запутался, почему мой родительский класс не распознает 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))

1 Ответ

0 голосов
/ 20 ноября 2018

Вам необходимо определить 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 в США иметрика;а также на объекте монеты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...