pyqt4 - Python里方法可以用变量表示吗

 江韦亭君733 发布于 2022-10-26 16:52

在做图形界面,界面里有三个ListWidget,每个ListWidget都有一个名字,假如分别叫a,b,c.
现在就是通过接收一个标志然后对相应的ListWidget做添加item等一系列的操作
我目前代码大概是这样的

# mode是标志,emails是邮件数据
def addQList(self,emails,mode):
    if mode == 'a':
        for subject in emails:
            if subject != '':
                abstractContent = '时间:'+ emails[subject]['date'] + '\n主题:' + subject + '\n' + emails[subject]['name']
                self.a.addItem(abstractContent)
                ...其他操作...
                
    elif mode == 'b':
        for subject in emails:
            if subject != '' and subject not in self.isSent:
                self.isSent.update({subject:emails[subject]})
                abstractContent = '时间:'+ emails[subject]['date'] + '\n主题:' + subject + '\n' + emails[subject]['name']
                self.b.addItem(abstractContent)
                ...其他操作...
                
    elif mode == 'c':
        for subject in emails:
            if subject != '' and subject not in self.isReceived:
                self.isReceived.update({subject:emails[subject]})
                abstractContent = '时间:'+ emails[subject]['date'] + '\n主题:' + subject + '\n' + emails[subject]['name']
                self.c.addItem(abstractContent)
                ...其他操作...

对标志做if判断后,就分别对相应ListWidget做操作,但是因为操作都是一样的,只是操作对象不一样,我知道这么写代码会很冗余。
所以想问一下有没有简单一点的方法,就是有没有类似这样的方法:
我不是获取到标志mode了吗,如果mode等于a,有没有一种方法直接操作self.mode,等同于操作self.a的感觉?
Python里可以这样吗?或者说有什么方法可以做到这种效果

4 个回答
  • 可以建立一个全局的字典。
    Lists = {'a': self.a, 'b': self.b}
    ...
    用的时候就Lists[mode].xxx

    2022-11-12 01:40 回答
  • 题主,你应该这样

     for subject in emails:
                if mode == 'b':
                    if subject in self.isSent:
                        continue
                if mode == 'c':
                    if subject in self.received:
                        continue
                self.isSent.update({subject:emails[subject]})
                abstractContent = '时间:'+ emails[subject]['date'] + '\n主题:' + subject + '\n' + emails[subject]['name']
                self.addItem(abstractContent, mode)#mode穿进去
                ...其他操作...
    2022-11-12 01:40 回答
  • 这个问题挺有意思的,这也是我为什么特别喜欢python的原因之一.
    函数本质,或者对于python来说,对象,本身就是一段内存中的二进制的空间而已.函数名实际上也是人附加给它的.那么,函数名如何映射到那段内存空间中呢.
    额,感觉会讲的很复杂.
    简单来说
    eval()
    可以,虽然这种做法比较不推荐

    2022-11-12 01:40 回答
  • 不知道下面是否是题主想要的意思。主要用getattr方法获取想要的对象,具体看下面代码,希望能帮到你

    class Test(object):
    
        def __init__(self):
            self.d = 4
    
        def a(self):
            print(1)
    
        def b(self):
            print(2)
    
        def c(self):
            print(3)
    
    x = "a"
    y = getattr(Test(), x)
    y()
    
    x = "b"
    y = getattr(Test(), x)
    y()
    
    x = "d"
    y = getattr(Test(), x)
    print(y)
    2022-11-12 01:40 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有