<p>只需将全局变量转换为实例变量:</p>
<pre><code>class BankAccount:
PENALTY = 5
def __init__(self, initial_balance):
"""Creates an account with the given balance."""
self.money = initial_balance
self.penalty = 0
def deposit(self, amount):
"""Deposits the amount into the account."""
self.money += amount
return self.money
def withdraw(self, amount):
"""
Withdraws the amount from the account. Each withdrawal resulting in a
negative balance also deducts a penalty fee of 5 dollars from the balance.
"""
if self.money - amount < 0:
self.money -= (amount + BankAccount.PENALTY)
self.penalty += BankAccount.PENALTY
else:
self.money -= amount
return self.money
def get_balance(self):
"""Returns the current balance in the account."""
return self.money
def get_fees(self):
"""Returns the total fees ever deducted from the account."""
return self.penalty
</code></pre>
<p>我还注意到您在<code>withdraw</code>函数中声明了一个名为<code>penalty</code>的变量。这看起来是避免<a href="http://en.wikipedia.org/wiki/Magic_number_%28programming%29#Unnamed_numerical_constants" rel="nofollow">magic numbers</a>的良好实践的开始,因此我继续沿着这些思路,将其作为<code>BankAccount</code>类的常量属性。</p>
<p>另外,在Python中,我们通常不使用函数来访问属性。与其<code>bobs_account.get_fees()</code>,不如<code>bobs_account.penalty</code>更正常。</p>