как использовать метод из одного класса в другом классе (это возможно) - PullRequest
0 голосов
/ 23 мая 2019

У меня есть программа банковского счета, которая контролирует сберегательные, чековые и бизнес-счета, и я хочу иметь возможность переводить некоторые деньги со сберегательного счета на текущий счет при появлении соответствующего запроса.

У меня естьметод move_to_checking в классе сбережений и метод grab_from_savings в классе проверки.метод move_to_checking работает как нужно, удаляя сумму, указанную из общей суммы сбережений, но метод grab_from_savings не добавляет сумму к контрольной сумме.

class CheckingAccount(Account):

    def __init__(self, cust_id, checking_total_amount):
        Account.__init__(self, cust_id) 
        self.checking_total_amount = checking_total_amount

    def grab_from_savings(self):
        moved_amount = 0
        moved_amount.move_to_checking()
        self.checking_total_amount += moved_amount.move_to_checking()

        return self.checking_total_amount


class SavingsAccount(Account):

    def __init__(self, cust_id, savings_total_amount):
        Account.__init__(self, cust_id)
        self.savings_total_amount = savings_total_amount

    def move_to_checking(self, amount_to_move):
        if amount_to_move <= self.savings_total_amount:
            self.savings_total_amount -= amount_to_move
            return amount_to_move
        else:
            return "insufficient funds!"

chck_1 = CheckingAccount('Jackson', 200)
savings_1 = SavingsAccount('Jackson', 500)
savings_1.move_to_checking(100)
print(savings_1)
chck_1.grab_from_savings()

Я хочу, чтобы результат дал 400 долларов, оставшихся в экономиисчет и $ 100 добавляются к текущему счету, оставляя это с $ 300.Сберегательный счет печатает 400 долларов, но проверка дает AttributeError: 'int' object has no attribute 'move_to_checking'.

1 Ответ

0 голосов
/ 23 мая 2019

Ошибка говорит вам, что у целого числа нет метода с именем move_to_checking. В grab_from_savings переменная moved_amount представляет собой целое число ноль.

Я думаю, что лучший способ поместить происходящее в объектно-ориентированную землю - создать класс BankAccount, который содержит как проверку Account, так и экономию Account. Тогда семантика перемещения денег между счетами имеет больше смысла.

class Account:
    def __init__(self, cust_id, checking_total_amount):
        self.cust_id = cust_id
        self.total_amount = total_amount

    def add_funds(self, funds):
        self.total_amount += funds
        return self.total_amount

    def remove_funds(self, funds):
        if funds > self.total_amount:
            raise ValueError('insufficient funds!')
        self.total_amount -= funds
        return self.total_amount


class BankAccount:

    def __init__(self, cust_id, checking_total, savings_total):
        self.cust_id = cust_id
        self.checking = Account(cust_id, checking_total)
        self.savings = Account(cust_id, savings_total)

    def move_to_checking(self, amount_to_move):
        # remove_funds will throw an error if there are insufficient funds
        self.savings.remove_funds(amount_to_move)
        self.checking.add_funds(amount_to_move)

jacksons_account = BankAccount('Jackson', 200, 500)
jacksons_account.move_to_checking(100)
print(jacksons_account.savings.total_amount)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...