Как вы вызываете метод родительского класса в словаре, созданном в дочернем классе? - PullRequest
0 голосов
/ 27 февраля 2020

Я работаю над проектом о наследовании и банковских счетах, в котором я определяю родительский и дочерний класс (соответственно Account и Checking_Account).

Checking_Account содержит словарь stati c, который отображает строки в функции называется "варианты". Некоторые функции определены в дочернем классе Checking_Account, некоторые определены в родительском классе Account.

Например,

options = {"See Number of Remaining Checks" : _remainingChecks,
           "View Balance" : super()._viewBalance}

Однако это возвращает ошибку

Traceback (most recent call last):
  File "/Users/dawsonren/Documents/ASWDV/Python/Accounting/account_SO.py", line 24, in <module>
    class Checking_Account(Account):
  File "/Users/dawsonren/Documents/ASWDV/Python/Accounting/account_SO.py", line 33, in Checking_Account
    "View Balance" : super()._viewBalance()}
RuntimeError: super(): no arguments

Вот минимальный воспроизводимый пример.

class Account(object):
    def __init__(self, name, bal):
        """(str, float) => Account object

        Instantiates the Account object.

        """
        self.name = name
        self.balance = bal

    def viewBalance(self):
        print(f"Account has ${self.balance}.")

    def run(self, options):
        """{str : function} => None
        Runs the function based on the input of the user.
        """

        for key in options.keys():
            print(key)
        select = input("Type the option you want.")
        options[select]()

class Checking_Account(Account):
    def __init__(self, name, bal, checks = 100):
        super().__init__(name, bal)
        self.checks = checks

    def remainingChecks(self):
        print(f"Account {self.num} has {self.checks} checks.")

    options = {"See Number of Remaining Checks" : remainingChecks,
               "View Balance" : super().viewBalance}

    def run(self):
        super().run(Checking_Account.options)

Это мой первый пост здесь, как старшеклассник, поэтому я мог бы использовать любую помощь, которую смогу получить. Если то, что я делаю, не является лучшей практикой, пожалуйста, укажите мне правильный способ сделать это!

1 Ответ

0 голосов
/ 27 февраля 2020

Я полагаю, у вас были классы о наследовании в объектно-ориентированном программировании, или, по крайней мере, вы читали об этом?

Здесь ваш класс Checking_Account наследуется от Account, так что это означает, что он наследует, среди другие вещи, его методы.

Так что не нужно пытаться вызвать super().viewBalance, вам просто нужно позвонить self.viewBalance().

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