3

現在、私は python プログラマーではありませんが、いくつかの python コードにメンテナンスを行っています。多かれ少なかれ次のようなものがあります。

class DerivedThread(threading.Thread):
  def __init__(self):
    threading.Thread.__init__(self)

  def initStuff():
    print "Hello 2"

  def run(self):
    print "Hello 1"
    self.initStuff()
    print "Hello 3"

initStuff実際には呼び出しませんprint。いくつかの変数を設定するだけです。編成のためにこのメソッドを追加しまし__init__run

問題は、実行が に達するself.initStuff()と、もうメッセージが表示"Hello 1"されないことです.

何が起こっていますか?

4

2 に答える 2

4

問題は、メソッドの定義にありますinitStuff。その定義には少なくとも 1 つの引数 (通常は「self」と呼ばれます) が必要です (引数を定義していません)。次に何が起こるか見てみましょう:

class MyClass(object):

    def initStuff(self):
        pass

c = MyClass()
c.initStuff()

TypeError: initStuff() takes no arguments (1 given)

したがって、定義したスレッドでコードがサイレントに失敗することは明らかです。

initStuffこの問題を解決する方法は、 Python の規則に従ってメソッドを定義することです。

 ...
 def initStuff(self):  #  Here 'self' argument is defined
      pass

この種のメソッドは、クラス インスタンスに代わって呼び出されるため、instancemethod と呼ばれます (最初の引数は、明示的に定義する必要があるインスタンス オブジェクト自体です)

クラスの詳細については、ドキュメントを参照してください。

于 2012-08-11T21:08:21.093 に答える
1

selfああ、わかりました。引数としてに渡す必要がありましたinitStuff

于 2012-08-11T20:39:05.983 に答える