我正在尝试使用聚合,但我认为我做错了

时间:2020-04-24 21:38:41

标签: python python-3.x aggregation

所以我用Bank类编写了一个代码,该类具有一个验证方法,而SavingAccount类具有一个退出方法,并且我试图使用聚合将它们两者关联起来,但是它不起作用。验证正在验证所有内容。重点应该放在Bank类和SavingAccount类上,最后,我放一个不起作用的实例(acc1.withdraw()),我放其他类,以便您可以尝试代码,无论如何这里是代码:

预期的行为:在不调用add_acc()函数的情况下,验证应返回False,并且不应该让我使用withdraw()函数。

实际行为:即使没有调用add_acc(),我也可以退出()

from abc import ABC, abstractmethod


class Account(ABC):
    def __init__(self, agency, acc_number, balance):
        self.agency = agency
        self.acc_number = acc_number
        self.balance = balance

    @abstractmethod
    def withdraw(self, value):
        pass


class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age


class Bank:
    def __init__(self):
        self.account = {}

    def add_acc(self, client, account):
        self.account.update({f'{client}': account})

    def validation(self):
        if self.account:
            for acc in self.account:
                if acc in self.account:
                    return True
                else:
                    return False


class SavingAccount(Account):
    if Bank.validation:
        def withdraw(self, value):
            if self.balance < value:
                print('Insufficient funds.')
                return
            self.balance -= value
            print(f'{value} dollars withdrawn. Current balance: {self.balance}$')
    else:
        print('Account information invalid.')


class Client(Person):
    def __init__(self, name, age, acc_type):
        super().__init__(name, age)
        self.acc_type = acc_type

bank1 = Bank()
acc1 = SavingAccount(33333, 33330, 2000)
client1 = Client('Matthew', 40, acc1)
acc1.withdraw(500)   # Right here this shouldn't work without me adding bank1.add_acc()

1 个答案:

答案 0 :(得分:2)

您的代码有两个主要问题。

首先是您对SavingsAccount的实现存在严重缺陷。您正在检查Bank.validate是否真实,而不是调用它。但是,即使您确实拨打过电话,在您拨打电话的地方也没有任何意义。您正在尝试在定义类时 进行验证,而不是在创建类的实例或尝试提取资金时进行验证。那没有任何意义。即使还没有建立任何银行,储蓄帐户的概念(即类别的定义)也应该存在。稍后再进行验证!可能您需要使用Bank类的某个特定实例进行验证,而不是直接通过Bank类进行验证。

第二个问题是您的Bank.validate方法没有做任何有用的事情。它循环遍历self.accounts词典中的所有键,但是然后仅检查第一个键是否在词典中(如果到达了代码的那部分,它将一直存在),然后返回。可能您希望该功能正在检查一个特定帐户,而不是通常检查任意帐户。该帐户(或帐户号码等)可能应该是该函数的参数。

相关问题