: 이것은 그가 끝나면 같이 줄 것입니다. mapInitiator2Type
의 매우 건설이 아직없는 어떤 특성을 가지고 MetaDataElement
을 필요로하기 때문에 따라서,
class MetaDataElement:
(MD_INVALID, MD_CATEGORY, MD_TAG) = range(3)
mapInitiator2Type = {'!':MetaDataElement.MD_CATEGORY,
'#':MetaDataElement.MD_TAG}
이 실패합니다. 당신은 여러분의 상수 인 MD_INVALID
등을 클래스의 생성에 국한된 변수로 생각할 수 있습니다. icktoofay으로 다음 작품을 쓴 이유이다 : 그러나
class MetaDataElement:
(MD_INVALID, MD_CATEGORY, MD_TAG) = range(3)
mapInitiator2Type = {'!': MD_CATEGORY, # MD_CATEGORY is like a local variable!
'#': MD_TAG}
, 당신은 당신도 이의
def method_of_MetaDataElement(self):
print MetaDataElement.MD_TAG
으로, 코드의 아직되지 않은 해석 조각 클래스 MetaDataElement
를 참조 할 수 있습니다 MD_TAG
가 method_of_MetaDataElement()
실행 로컬 변수 (MD_TAG
단지 클래스 구조 중에 로컬 변수의 종류로 정의 하였다)의 종류가 아니기 때문에 여기 MetaDataElement
을 참조한다. MetaDataElement
클래스가 만들어지면 MD_TAG
은 단순히 클래스 속성이므로 method_of_MetaDataElement()
은 클래스 속성으로 참조해야합니다.
출처
2010-07-23 06:46:02
EOL
마지막 예제는'self.MD_TAG'로 쓰여질 수 있는데, 이것은 클래스를 참조 할 필요가 없다. 이름. – Marcin
@Marcin :'self.MD_TAG'도 가능 합니다만,'MetaDataElement'가 서브 클래스 화 (하위 클래스는'MD_TAG'를 덮어 쓰기)하는 경우'MetaDataElement.MD_TAG'와 동일하지 않습니다. 둘 다 유효하지만 선택해야하는 것은 현재의 상황에 달려 있습니다. – EOL
솔직히 말해서, 하위 클래스가 클래스 멤버를 유용하게 변경할 수 없도록하는 방법이 잘못되었다고 생각합니다. 따라서이를 방지 할 구체적인 이유가없는 한 'self'를 사용하는 것이 좋습니다. – Marcin