Python参考问题

Python参考问题,第1张

概述我在 Python中经历了(对我来说)非常奇怪的问题. 我有一个名为Menu的类:(片段) class Menu: """Shows a menu with the defined items""" menu_items = {} characters = map(chr, range(97, 123)) def __init__(self, menu_items 我在 Python中经历了(对我来说)非常奇怪的问题.

我有一个名为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参考问题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1195786.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存