복붙노트

[PYTHON] Python AttributeError : 객체에 속성이 없습니다.

PYTHON

Python AttributeError : 객체에 속성이 없습니다.

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'객체에 '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 클래스 코드를 게시 할 수 없습니다. 그러나 나는 그것이 잘 작동한다는 것을 확신 할 수있다.

해결법

  1. ==============================

    1.들여 쓰기가 잘못되어 탭과 공백이 섞여 있습니다. python -tt를 사용하여 스크립트를 실행하여 확인하십시오.

    들여 쓰기가 잘못되어 탭과 공백이 섞여 있습니다. python -tt를 사용하여 스크립트를 실행하여 확인하십시오.

  2. ==============================

    2.이러한 종류의 버그는 파이썬 멀티 스레딩에서 흔히 발생합니다. 인터프리터를 해체 할 때 관련 모듈 (이 경우 myThread)이 일종의 del myThread를 통과한다는 것입니다.

    이러한 종류의 버그는 파이썬 멀티 스레딩에서 흔히 발생합니다. 인터프리터를 해체 할 때 관련 모듈 (이 경우 myThread)이 일종의 del myThread를 통과한다는 것입니다.

    self.sample () 호출은 myThread .__ dict __ [ "sample"] (self)와 대략 동일합니다. 그러나 인터프리터의 분석 순서가 진행되는 중에 알려진 유형의 자체 사전에 이미 myThread가 삭제되었을 수 있으며 이제는 기본적으로 NoneType이며 '샘플'속성이 없습니다.

  3. ==============================

    3.파이썬 3>을 사용하는 경우이 문제는 이중 변수 밑줄로 시작하는 개인 변수를 사용하는 경우 발생할 수 있습니다. 예를 들어 self .__ yourvariable은이 문제와 관련하여

    파이썬 3>을 사용하는 경우이 문제는 이중 변수 밑줄로 시작하는 개인 변수를 사용하는 경우 발생할 수 있습니다. 예를 들어 self .__ yourvariable은이 문제와 관련하여

  4. ==============================

    4.파이썬은 클래스 이름을 포함하도록 내부적으로 이름을 변경하여 해당 멤버를 보호합니다. object._className__attrName과 같은 속성에 액세스 할 수 있습니다.

    파이썬은 클래스 이름을 포함하도록 내부적으로 이름을 변경하여 해당 멤버를 보호합니다. object._className__attrName과 같은 속성에 액세스 할 수 있습니다.

  5. ==============================

    5.클래스의 비공개 필드에는 액세스 할 수 없습니다. 비공개 필드는 __로 시작합니다. 예를 들면 - 클래스 자동차 :     def init (self) :         self .__ updatesoftware ()

    클래스의 비공개 필드에는 액세스 할 수 없습니다. 비공개 필드는 __로 시작합니다. 예를 들면 - 클래스 자동차 :     def init (self) :         self .__ updatesoftware ()

    def drive(self):
        print("driving")
    
    def __updatesoftware(self):
        print("updating software:")
    

    obj = car () obj.drive () obj .__ updatesoftware () ## 여기서는 ____updatesoftware가 개인 메소드이기 때문에 오류가 발생합니다.

  6. from https://stackoverflow.com/questions/11685936/python-attributeerror-object-has-no-attribute by cc-by-sa and MIT license