0

これが私のコードが機能しない

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 このクラスのどこからでもアクセスできる静的メンバーではありませんか?

4

1 に答える 1

2

Pythonには静的メンバーのようなものはありません。あなたが定義したのはクラスメンバーです。メンバーはクラスオブジェクトに格納され、すでに示したように、としてアクセスされMyClass.special_itemsます。

あなたがやろうとしているのは初期化することのようですspecial_items. そのためにclassmethodは、より適切です(の使用はありませんself):

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

としてアクセスすることもできますがself.special_items、それでもクラスオブジェクトに格納されます。つまり、クラスのすべてのオブジェクトが同じ値にアクセスします。

于 2013-03-13T18:38:47.463 に答える