10

私はこのクラスを持っています:

from threading import Thread 
import time

class Timer(Thread): 
    def __init__(self, interval, function, *args, **kwargs): 
        Thread.__init__() 
        self.interval = interval 
        self.function = function 
        self.args = args 
        self.kwargs = kwargs 
        self.start()

    def run(self): 
        time.sleep(self.interval) 
        return self.function(*self.args, **self.kwargs) 

そして、このスクリプトでそれを呼び出しています:

    import timer 
    def hello():
        print \"hello, world
    t = timer.Timer(1.0, hello)
    t.run()

このエラーが発生し、理由がわかりません。unbound method __init__() must be called with instance as first argument

4

4 に答える 4

17

あなたがやっている:

Thread.__init__() 

使用する:

Thread.__init__(self) 

または、むしろ、super()

于 2009-10-23T18:29:40.457 に答える
9

これはSOでよくある質問ですが、簡単に言うと、スーパークラスのコンストラクターを呼び出す方法は次のようになります。

super(Timer,self).__init__()
于 2009-10-23T18:29:06.510 に答える
3

まず、使用する必要がある理由:

Thread.__init__(self)

それ以外の

Thread.__init__()

これは、オブジェクト(クラスのインスタンス)ではなくクラス名を使用しているため、オブジェクトと同じ方法でメソッドを呼び出すことはできないためです。

次に、Python 3を使用している場合、サブクラスからスーパークラスメソッドを呼び出すための推奨スタイルは次のとおりです。

super().method_name(parameters)

Python 3では使用できますが:

SuperClassName.method_name(self, parameters)

これは古いスタイルの構文であり、優先スタイルではありません。

于 2015-11-03T18:39:03.300 に答える
1

'Thread'の引数として'self'を渡す必要があります。init '。その後、それは私のマシンで動作します。

于 2009-10-23T18:29:54.170 に答える