Python 实例方法中的静态变量
这是我写的代码,但它不工作
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
来访问它,但它仍然是存储在类对象上的,也就是说,所有这个类的对象访问的是同一个值。