加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Python参考问题

发布时间:2020-12-20 13:00:40 所属栏目:Python 来源:网络整理
导读:我在 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) de
我在 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,以便更深入地讨论类属性和实例属性之间的区别.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读