你不能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_TAGMetaDataElementMD_TAGmethod_of_MetaDataElement()