数据类在声明一个后设置新值
dataclass set new value after declaring one
from dataclasses import dataclass
@dataclass
class User:
name : str
balance : int
checking_account : bool
def withdraw(self,amount):
if amount > self.balance:
raise ValueError
else:
self.balance -= amount
return self.name + " " + "has" + " " + repr(self.balance) + "."
def check(self,other,money):
if other.checking_account is False:
raise ValueError
if other.balance < money:
raise ValueError
self.balance += money
other.balance -= money
return self.name + " " + "has" + " " + repr(self.balance) + " " + "and" + " " + other.name + " " + "has" + " " + repr(other.balance) + "."
def add_cash(self,amount):
self.balance += int(amount)
return self.name + " " + "has" + " " + repr(self.balance) + "."
Jeff = User("Jeff",70,True)
Joe = User('Joe', 70, False)
print(Jeff.withdraw(2))
#print(Joe.check(Jeff, 50))
#print(Jeff.check(Joe, 80)) # Raises a ValueError
Joe.checking_account = True
print(Jeff.check(Joe, 80)) # Returns 'Jeff has 98 and Joe has 40'
我尝试实现一点银行业务 class。当我在下面进行测试时,我注意到我无法更改布尔值。这些变量不是私有的,为什么这不起作用?
您实际上可以更改布尔值并且您正在这样做,由于检查方法中的其他条件,您的代码引发了值错误:
if other.balance < money:
raise ValueError
在测试中,Jeff 的余额中有 70,而您正试图获得 money 参数指定的 80,因为 70 小于 80,它会引发值错误。
如果您没有调试工具,我建议您在对程序的最终输出感到困惑时打印不同状态的变量。
您可以通过在错误之前打印它的值来验证布尔值是否已更改为 True。
from dataclasses import dataclass
@dataclass
class User:
name : str
balance : int
checking_account : bool
def withdraw(self,amount):
if amount > self.balance:
raise ValueError
else:
self.balance -= amount
return self.name + " " + "has" + " " + repr(self.balance) + "."
def check(self,other,money):
if other.checking_account is False:
raise ValueError
if other.balance < money:
raise ValueError
self.balance += money
other.balance -= money
return self.name + " " + "has" + " " + repr(self.balance) + " " + "and" + " " + other.name + " " + "has" + " " + repr(other.balance) + "."
def add_cash(self,amount):
self.balance += int(amount)
return self.name + " " + "has" + " " + repr(self.balance) + "."
Jeff = User("Jeff",70,True)
Joe = User('Joe', 70, False)
print(Jeff.withdraw(2))
#print(Joe.check(Jeff, 50))
#print(Jeff.check(Joe, 80)) # Raises a ValueError
Joe.checking_account = True
print(Jeff.check(Joe, 80)) # Returns 'Jeff has 98 and Joe has 40'
我尝试实现一点银行业务 class。当我在下面进行测试时,我注意到我无法更改布尔值。这些变量不是私有的,为什么这不起作用?
您实际上可以更改布尔值并且您正在这样做,由于检查方法中的其他条件,您的代码引发了值错误:
if other.balance < money:
raise ValueError
在测试中,Jeff 的余额中有 70,而您正试图获得 money 参数指定的 80,因为 70 小于 80,它会引发值错误。
如果您没有调试工具,我建议您在对程序的最终输出感到困惑时打印不同状态的变量。
您可以通过在错误之前打印它的值来验证布尔值是否已更改为 True。