【发布时间】:2009-12-08 13:44:19
【问题描述】:
我在 Python 中遇到了一个(对我而言)非常奇怪的问题。
我有一个类叫 Menu: (sn-p)
class Menu:
"""Shows a menu with the defined items"""
menu_items = {}
characters = map(chr, range(97, 123))
def __init__(self, menu_items):
self.init_menu(menu_items)
def init_menu(self, menu_items):
i = 0
for item in menu_items:
self.menu_items[self.characters[i]] = item
i += 1
当我实例化这个类时,我传入了一个字典列表。字典是用这个函数创建的:
def menu_item(description, action=None):
if action == None:
action = lambda : None
return {"description": description, "action": action}
然后列表是这样创建的:
t = [menu_item("abcd")]
m3 = menu.Menu(t)
a = [ menu_item("Test")]
m2 = menu.Menu(a)
b = [ menu_item("Update", m2.getAction),
menu_item("Add"),
menu_item("Delete")]
m = menu.Menu(b)
当我运行我的程序时,我每次都会得到相同的菜单项。我已经用 PDB 运行了这个程序,发现一旦创建了一个类的另一个实例,所有以前的类的 menu_items 都设置为最新列表。似乎 menu_items 成员是静态成员。
我在这里监督什么?
【问题讨论】: