我有一个名为Menu的类:(片段)
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成员是静态成员.
我在这里监督什么?
解决方法 menu_items dict是一个在所有Menu实例之间共享的类属性.像这样初始化它,你应该没事:class Menu: """Shows a menu with the defined items""" characters = map(chr,menu_items): self.menu_items = {} self.init_menu(menu_items) [...]
请查看Python tutorial section on classes,以便更深入地讨论类属性和实例属性之间的区别.
总结以上是内存溢出为你收集整理的Python参考问题全部内容,希望文章能够帮你解决Python参考问题所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)