实例方法中的python静态变量

实例方法中的python静态变量,python,class,variables,static,Python,Class,Variables,Static,这是我的代码不起作用 class MyClass: special_items = {} def preload_items(self): special_items['id'] = "properties" NameError:未定义全局名称“特殊项目” 工作 它不是一个我可以在这个类的任何地方访问的静态成员吗?python中没有静态成员。您定义的是类成员。该成员存储在类对象上,如您所示,它作为MyClass.special\u items访问 似乎您要做的是

这是我的代码不起作用

class MyClass:
    special_items = {}
    def preload_items(self):
        special_items['id'] = "properties"
NameError:未定义全局名称“特殊项目”

工作


它不是一个我可以在这个类的任何地方访问的静态成员吗?

python中没有静态成员。您定义的是类成员。该成员存储在类对象上,如您所示,它作为
MyClass.special\u items
访问

似乎您要做的是初始化
特殊项目。
因此,
classmethod
更合适(self没有用处):


请注意,您也可以将其作为
self.special\u items
访问,但它仍然存储在类对象上,即该类的所有对象访问相同的值。

可能建议对此类使用classmethod。。。(或者请注意,
self.special_items['id']
也适用于这个简单的示例)所以我必须在这个特殊_items之前附加一些东西?在Python中没有调用这个变量的干净方法吗?为什么你认为它不干净?您可以定义一个全局变量,但如果该变量在逻辑上与MyClass关联,则类成员会更好。@wwli:指定使用“干净方式”的语言,并解释该“干净方式”的具体内容,可能会有所帮助你喜欢过python的语义。@伯尼从C++和java中显然可以访问没有任何附加的静态/类变量:
class MyClass:
    special_items = {}
    def preload_items(self):
        MyClass.special_items['id'] = "properties"
@classmethod
def preload_items(cls):
        cls.special_items['id'] = "properties"