2017-03-27 140 views
0

我試圖在類中調用方法類中的方法;這一呼籲是下面的最後一行,self.z()調用蟒蛇

class Wait: 
    def __init__(self,a): 
      self.a = a 
    def countdown(self,a): 
     for remaining in range(self.a, 0, -1): 
      sys.stdout.write("\r") 
      sys.stdout.write("{:2d} seconds remaining.".format(remaining)) 
      sys.stdout.flush() 
      time.sleep(1) 
     sys.stdout.write("\rWait Complete!   \n") 
    def z(self): 
     self.countdown(100) 
    self.z() 

不過,我得到這個錯誤:

Traceback (most recent call last): 
    File "./countdown.py", line 6, in <module> 
    class Wait: 
    File "./countdown.py", line 18, in Wait 
    self.z() 
NameError: name 'self' is not defined 

我怎麼能叫countdown從這個類中的另一個方法是什麼?

+0

你想火'self.z()'在對象創建時立即? – castis

+1

'self.z()'只能在類的實例方法中使用。你想達到什麼目的? –

+1

這真的需要成爲一堂課嗎?將「倒計時」作爲獨立功能有什麼問題? – Kevin

回答

2

的問題是,在類體內沒有定義; 自我是每個方法的參數,但你不能在這一點上的任何方法內。我想你可能會嘗試用100秒的倒計時,這意味着你需要測試這一點,在你的主程序底部代碼:

class Wait: 
    def __init__(self,a): 
      self.a = a 
    def countdown(self,a): 
     for remaining in range(self.a, 0, -1): 
      sys.stdout.write("\r") 
      sys.stdout.write("{0:2d} seconds remaining.".format(remaining)) 
      sys.stdout.flush() 
      time.sleep(1) 
     sys.stdout.write("\rWait Complete!   \n") 
    def z(self): 
     self.countdown(100) 

ticker = Wait(10) 
ticker.z() 

請注意,您的代碼忽略從發送的值z,而是使用創建時設置的計時器值。另請注意,我已更正了格式化的輸出語句。

你可以把它從這裏?

+0

不完全是我想要的。如前所述,我只是不想使用另一個班級倒計時/等待。我想在同一個班級中使用倒計時方法,我現在說班級ABC,以便可以在班級ABC的其他方法中使用它。比方說,def z想要執行cli「abcd」並想等待100秒。 –

+0

然後請澄清你的問題,也許會顯示ABC類失敗的嘗試。您的帖子將所有方法都提供給** Wait **,我的回答保留了這一點。您的錯誤是將活動代碼放置在* Class *的主體中,並嘗試使用未在該級別定義的變量。 – Prune

+0

另外,請注意,I *確實*回答了您提出的問題:您的倒計時方法實際上可以從課堂內進行調用。你的** z **調用是非法的,但** z **調用**倒數**已經是正確的。 – Prune