MetaDataElement
まだ存在しないため、構築中は参照できません。したがって、
class MetaDataElement:
(MD_INVALID, MD_CATEGORY, MD_TAG) = range(3)
mapInitiator2Type = {'!':MetaDataElement.MD_CATEGORY,
'#':MetaDataElement.MD_TAG}
の構築そのものが、まだ持っていない属性を持つmapInitiator2Type
必要があるため、失敗します。定数などは、クラスの構築に対してローカルな変数MetaDataElement
と考えることができます。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
ただし、次のように、まだ解釈されていないコード片でクラスを参照できます。
def method_of_MetaDataElement(self):
print MetaDataElement.MD_TAG
は実行時に一種のローカル変数ではないため、ここでもを参照する必要があります (はクラス構築時に一種のローカル変数として定義されただけです)。クラスが作成されると、単にクラス属性になるため、そのように参照する必要があります。MetaDataElement
MD_TAG
method_of_MetaDataElement()
MD_TAG
MetaDataElement
MD_TAG
method_of_MetaDataElement()