Python 2.7中的类 - 不确定是什么错误

时间:2012-10-07 02:12:12

标签: python class methods

只需一个简单的存款和退出帐户的程序。 我正试图通过测试它们来学习课程。

class bank:
    def __init__(self):
        self.origBal = 0
    def deposit(self, amount):
        self.origBal += amount
    def withdraw(self, amount):
        self.origBal -= amount
b = bank()
d = bank()
w = bank()

我可能最好从输出中看到我遇到的这个问题。

例如,这是输出。

w.withdraw(3423)
b.origBal
-3423
d.deposit(3423)
b.origBal
-3423
d.deposit(322423)
d.origBal
325846
d.deposit(3223)
d.origBal
329069
w.withdraw(324334)
b.origBal
-3423
w.withdraw(234)
b.origBal
-3423

不完全确定发生了什么。

我确信我可以通过手动输入(-n)或(+ n)来修复它,并且只有一种方法,但我想避免这种情况。

2 个答案:

答案 0 :(得分:2)

当您b = bank()时,您创建了一个银行。当您执行d = bank()时,您将创建第二个银行。当您执行w = bank()时,您将创建第三个银行。每家银行都有自己的origBal。在三个对象之一上调用depositwithdraw不会影响其他两个对象。如果你这样做

b = bank()
b.deposit(10)
b.withdraw(100)

。 。 。然后事情应该像你期望的那样工作。

您应该阅读the Python tutorial以了解课程的运作方式。

答案 1 :(得分:1)

要做你想做的事,你需要使用类变量而不是对象变量。这些是整个班级定义和使用的,如下所示。

class Bank(object):
    origBal = 0
    def deposit(self, amount):
        Bank.origBal += amount
    def withdraw(self, amount):
        Bank.origBal -= amount

b = Bank()
d = Bank()
w = Bank()

w.withdraw(3423)
b.origBal
-3423
d.deposit(3423)
b.origBal
0
d.deposit(322423)
b.origBal
322423
d.deposit(3223)
b.origBal
325646
w.withdraw(324334)
b.origBal
1312
w.withdraw(234)
b.origBal
1078