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

查看:111
本文介绍了pyqt4 - Python里方法可以用变量表示吗的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

在做图形界面,界面里有三个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里可以这样吗?或者说有什么方法可以做到这种效果

解决方案

不知道下面是否是题主想要的意思。主要用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)

这篇关于pyqt4 - Python里方法可以用变量表示吗的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆