Python 实例方法中的静态变量

0 投票
1 回答
1347 浏览
提问于 2025-04-17 18:58

这是我写的代码,但它不工作

class MyClass:
    special_items = {}
    def preload_items(self):
        special_items['id'] = "properties"

出现了错误:NameError: 全局名称'special_items'没有定义

这个代码是可以正常工作的

class MyClass:
    special_items = {}
    def preload_items(self):
        MyClass.special_items['id'] = "properties"

难道special_items不是一个我可以在这个类里随处访问的静态成员吗?

1 个回答

2

在Python中没有所谓的静态成员。你所定义的其实是一个类成员。这个成员是存储在类对象上的,正如你已经展示的那样,可以通过 MyClass.special_items 来访问。

看起来你想要做的是初始化 special_items。为此,使用 classmethod 更合适(因为这里不需要用到 self):

@classmethod
def preload_items(cls):
        cls.special_items['id'] = "properties"

需要注意的是,你也可以通过 self.special_items 来访问它,但它仍然是存储在类对象上的,也就是说,所有这个类的对象访问的是同一个值。

撰写回答