1. ホーム
  2. python

[解決済み] なぜAttributeErrorが発生するのでしょうか?オブジェクトに属性がありません。[クローズド]

2022-03-01 05:34:04

質問

MyThreadというクラスがあります。その中に、メソッドのサンプルがあります。それを同じオブジェクトコンテキストから実行しようとしています。コードを見てください。

class myThread (threading.Thread):
    def __init__(self, threadID, name, counter, redisOpsObj):
        threading.Thread.__init__(self)
        self.threadID = threadID
        self.name = name
        self.counter = counter
        self.redisOpsObj = redisOpsObj
        
    def stop(self):
        self.kill_received = True
            
    def sample(self):
        print "Hello"
                
    def run(self):
        time.sleep(0.1)
        print "\n Starting " + self.name
        self.sample()

とてもシンプルに見えますね。しかし、これを実行すると、次のようなエラーが発生します。

AttributeError: 'myThread' object has no attribute 'sample' 今、私はそのメソッドを持っています、そこに。では、何が問題なのでしょうか?助けてください

編集:これはスタックトレースです

Starting Thread-0

Starting Thread-1
Exception in thread Thread-0:
Traceback (most recent call last):
File "/usr/lib/python2.6/threading.py", line 525, in __bootstrap_inner
self.run()
File "./redisQueueProcessor.py", line 51, in run
self.sample()
AttributeError: 'myThread' object has no attribute 'sample'

Exception in thread Thread-1:
Traceback (most recent call last):
File "/usr/lib/python2.6/threading.py", line 525, in __bootstrap_inner
self.run()
File "./redisQueueProcessor.py", line 51, in run
self.sample()
AttributeError: 'myThread' object has no attribute 'sample'

私はこのように呼び出しています。

arThreads = []
maxThreads = 2;

for i in range( maxThreads ):
    redisOpsObj = redisOps()
    arThreads.append( myThread(i, "Thread-"+str(i), 10, redisOpsObj) )

申し訳ありませんが、redisOpsクラスのコードを掲載することはできません。しかし、私はそれがうまく動作することを保証することができます。

解決方法は?

インデントが狂っていて、タブとスペースが混在しています。このスクリプトを python -tt をクリックして確認してください。