문제

Python,내가 가지고 싶은 클래스의 특성,사전,과 함께 초기화 값입니다.이 코드:

class MetaDataElement:
    (MD_INVALID, MD_CATEGORY, MD_TAG) = range(3)
    mapInitiator2Type = {'!':MetaDataElement.MD_CATEGORY, 
                         '#':MetaDataElement.MD_TAG}

하지만을 실행하려고 할 때 이 코드는,나는 오류 메시지로"일으키:이름'MetaDataElement'는"정의되지 않았습니다.을 도울 수 있을까?

미리 감사드립니다.

도움이 되었습니까?

해결책

참조할 수 없습니다 MetaDataElement 는 동안 그것은 건축되기 때문에,아직 존재하지 않습니다.따라서,

class MetaDataElement:
    (MD_INVALID, MD_CATEGORY, MD_TAG) = range(3)
    mapInitiator2Type = {'!':MetaDataElement.MD_CATEGORY, 
                         '#':MetaDataElement.MD_TAG}

실패기 때문에 매우 건설 mapInitiator2TypeMetaDataElement 하는 특성을 갖고 있는 그지 않습니다.의 생각할 수 있는 귀하의 상수 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}

그러나,참조할 수 있습니다 클래스 MetaDataElement 어떤 아직 un-해석 조각의 코드에서와 같이,

    def method_of_MetaDataElement(self):
        print MetaDataElement.MD_TAG

를 참조 MetaDataElement, 여기 때문에, MD_TAG 지 종류의 지역 변수 method_of_MetaDataElement() 은행(MD_TAG 었으로 정의된 종류의 지역 변수는 동안 클래스 건설).일단 클래스 MetaDataElement 가 생성 MD_TAG 단순히 클래스의 특성,는 이유 method_of_MetaDataElement() 를 참조해야 합니다 그것은 이와 같이.

다른 팁

첫째,당신이 사용하는 이전 스타일의 클래스입니다.당신은 아마 사용하여 새로운 스타일의 클래스,이렇게:

class MetaDataElement(object):
    ...

참고 (object).하지만,어쨌든,단순히 제거 MetaDataElement. 참조할 때 클래스는 특성이 있습니다.이것은 무엇이 보이는 것 같은 그 때 이루어집니다:

class MetaDataElement(object):
    (MD_INVALID, MD_CATEGORY, MD_TAG) = range(3)
    mapInitiator2Type = {'!': MD_CATEGORY, 
                         '#': MD_TAG}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top