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



所以我用一个带有验证方法的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()

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

首先,您对SavingsAccount的实现存在严重缺陷。你在检查Bank.validate是否真实,而不是调用它。但即使你调用了它,在你调用的位置也没有任何意义。您试图在定义类时执行验证,而不是在创建类的实例或尝试提取资金时执行验证。这没有任何意义。储蓄账户的概念(即类别的定义(应该能够存在,即使还没有任何银行成立。请稍后进行验证!您可能需要使用验证Bank类的特定实例,而不是直接使用Bank类。

第二个问题是Bank.validate方法没有做任何有用的事情。它在self.accounts字典中的所有键上循环,但只检查第一个键,看看它是否在字典中(如果你到达了代码的那一部分,它总是在字典中(,然后返回。您可能希望该函数检查一个特定帐户,而不是一般检查任意帐户。该帐户(或帐号,或其他什么(可能应该是函数的参数。

最新更新