2016-12-03 58 views
0

我創建了一個帳戶類作爲Python實驗室任務的一部分,但我並不理解正在發生的問題。構造函數的功能就像我將值傳遞給其他方法時一樣,但我必須創建一個名爲撤回的方法。調用修改另一個值的方法

,因爲它聽起來像它應該是我寫,但我收到讀取

TypeError: unsupported operand type(s) for -: 'Account' and 'int' 

爲我創建的方法的代碼段中的誤差低於:

def withdraw(balance,withdrawn): 
    self.__balance=balance-withdrawn 

......並且它在下面被進一步調用如下:

acct1.withdraw(2500) 

練習明確要求有這個方法,以及類似的存款使用的方法。我能想到的最好的方式是,它是方法的設置,而不是我稱之爲的方式。任何幫助和指針將不勝感激。另外,我還在學習,所以我很抱歉如果我濫用任何條款!

+0

定義你的退出函數是這樣的:'退出(個體經營,資產負債,撤回)'每個函數的類將採取對象作爲第一個參數。 acct1將作爲第一個參數傳遞來提取函數。所以在你的代碼中'balance = acct1' – MYGz

+0

這甚至沒有發生過。描述的寫法,退出沒有包括在構造函數中(出於可理解的原因),但對我來說,翻譯成包含「自我」是不必要的 –

+0

您的函數不必包含在構造函數 - 只需要包含成員變量(除非在某些特殊情況下)。 – danielunderwood

回答

1

你有幾個問題。我假設你的代碼的一部分,是這樣的:

class Account: 
    # Rest of class 
    def withdraw(balance, withdrawn): 
     self.__balance = balance - withdrawn 

你有幾個問題:

  1. withdraw()應採取類的參數。對於像這樣的成員方法,這應該是self,對於實際訪問實例(或類)變量的靜態方法,應該是cls。這將是任何類方法的第一個參數。您的錯誤來源於以下事實:balance被解釋爲Account,這意味着balance - withdrawn會嘗試從Account中減去int。通過重載正確的operators可以獲得此類行爲。
  2. 您的Account類有一個__balance字段,應該使用該字段而不是將餘額傳遞給該函數。您可以爲靜態方法傳遞一個餘額,但這不會有太大用處。
  3. 這不是一個真正的問題,但是您可能希望__balance可以被繼承者訪問,因此您可以使用_balance來獲得與其他語言中的受保護字段相同的內容。

你最終會得到這樣的:

class Account: 
    # Rest of class 
    def withdraw(self, withdrawn): 
     # Withdraw (could also be self._balance -= withdrawn) 
     self._balance = self._balance - withdrawn 
0

方法應該包括自我,嘗試這個辦法:

def withdraw(self, withdrawn): 
    self.balance -= withdrawn 
0

由於這是一個類的方法,帳戶(個體經營)的當前實例作爲第一個參數被傳遞給你的函數(餘額) 。由於撤銷函數試圖從int中減去一個Account對象,所以引發TypeError。

試試這個:

def withdraw(self, withdrawn) 
    self.__balance -= withdrawn