你不能参考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
你甚至have参考MetaDataElement
,在这里,因为MD_TAG
不是一种局部变量,当method_of_MetaDataElement()
被执行(MD_TAG
仅在类构造期间定义为一种局部变量)。有一次上课MetaDataElement
被建造,MD_TAG
只是一个类属性,这就是为什么method_of_MetaDataElement()
必须这样称呼它。