gpt4 book ai didi

Python - 从类主体内部引用类名

转载 作者:行者123 更新时间:2023-12-01 06:16:01 24 4
gpt4 key购买 nike

在Python中,我想要一个类属性,一个带有初始化值的字典。我写了这段代码:

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

但是当我尝试运行此代码时,收到一条错误消息“NameError:名称'MetaDataElement'未定义”。你能帮我吗?

提前致谢。

最佳答案

在构造 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,因为当method_of_MetaDataElement()时,MD_TAG不是一种局部变量 被执行(MD_TAG 仅在类构造期间定义为一种局部变量)。创建 MetaDataElement 类后,MD_TAG 只是一个类属性,这就是为什么 method_of_MetaDataElement() 必须这样引用它。

关于Python - 从类主体内部引用类名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3315510/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com