所以我用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()
答案 0 :(得分:2)
您的代码有两个主要问题。
首先是您对SavingsAccount
的实现存在严重缺陷。您正在检查Bank.validate
是否真实,而不是调用它。但是,即使您确实拨打过电话,在您拨打电话的地方也没有任何意义。您正在尝试在定义类时 进行验证,而不是在创建类的实例或尝试提取资金时进行验证。那没有任何意义。即使还没有建立任何银行,储蓄帐户的概念(即类别的定义)也应该存在。稍后再进行验证!可能您需要使用Bank
类的某个特定实例进行验证,而不是直接通过Bank
类进行验证。
第二个问题是您的Bank.validate
方法没有做任何有用的事情。它循环遍历self.accounts
词典中的所有键,但是然后仅检查第一个键是否在词典中(如果到达了代码的那部分,它将一直存在),然后返回。可能您希望该功能正在检查一个特定帐户,而不是通常检查任意帐户。该帐户(或帐户号码等)可能应该是该函数的参数。