数据类在声明一个后设置新值

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。