2014-11-21 10 views
2

밑줄을 두 개 적용하면 오류가 발생합니다. AttributeError: 'Organization' object has no attribute '__employees' 다음은 코드입니다.파이썬 속성 오류 객체에 속성이 없습니다.

class Organization(object): 
     __employees=[] 

    google=Organization() 
    google.__employees.append('Erik') 

파이썬은 개인 변수 개념을 구현하지 않습니다. 그렇다면 무엇이 잘못 됐는지. 하나의 밑줄 코드를 제거하면 오류없이 실행됩니다.

+2

http://stackoverflow.com/questions/1301346/the-meaning-of-a-single-and-a-double-underscore-before-an-object-name-in-python – IanAuld

답변

2

그럼 개인 변수로 선언했습니다. 당신이 _Classname__Variablename로 vairable 이름을 저장 볼 수 있듯이

>>> class Organization(object): 
...  __employees = [] 
... 
>>> google = Organization() 
>>> google._Organization__employees.append('Erik') 
>>> google._Organization__employees 
['Erik'] 

>>> dir(Organization) 
['_Organization__employees', '__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__'] 

. 귀하의 경우에는 _Organization__employees입니다. Python doc S로부터

:

폼 __spam의 상관 식별자 (적어도 두 개의 주요한 밑줄, 최대 하나의 후행 밑줄에 )를 텍스트로 클래스 이름은 현재 클래스의 이름이다 _classname__spam로 대체 선두 언더필이 제거되었습니다. 이 변경은 식별자의 구문 위치에 대해 에 관계없이 수행되므로 클래스 전용 인스턴스 및 클래스 변수, 메서드, 변수 이 인스턴스에 저장된 경우에도 을 정의하는 데 사용할 수 있습니다. 이 클래스는 다른 클래스의 인스턴스에 전용입니다.

관련 문제