2017-03-27 21 views
0

クラス内でメソッドを呼び出そうとしています。その呼び出し以下の最後の行で、self.z()Pythonのクラス内でメソッドを呼び出す

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

また、私は*あなたの質問に答えました:あなたのカウントダウン方法は実際にはクラス内から呼び出すことができます。 ** z **の呼び出しは違法ですが、** z **呼び出し**のカウントダウン**は既に正しいです。 – Prune

関連する問題