基于Python中的另一个变量调用类变量

时间:2014-08-24 20:33:18

标签: python class

我有这个类的代码:

class TeamID:
    def __init__(self, name, ID, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, w11, w12, w13, w14, wins, losses, pr):
        self.name = name
        self.ID = ID
        self.w1 = w1
        self.w2 = w2
        self.w3 = w3
        self.w4 = w4
        self.w5 = w5
        self.w6 = w6
        self.w7 = w7
        self.w8 = w8
        self.w9 = w9
        self.w10 = w10
        self.w11 = w11
        self.w12 = w12
        self.w13 = w13
        self.w14 = w14
        self.wins = wins
        self.losses = losses
        self.pr = pr

我也有这个单独的功能:

def scores(teamA, teamB, w):
    for a,b in zip(teamA,teamB):
        for i in AllTeams:
            if a == i.name:
                match = [item.text for item in soup.findAll("div", { "class" : "danglerBox totalScore" })]

teamA和teamB都是团队列表,其中'w'是当前周(1,2,3等)

我想根据“w”设置得分,匹配其中一个类变量。因此,如果w = 1,我想将'匹配'设置为i.w1。如果w = 2,则i.w2 =匹配。我能做到这一点的唯一方法就是拥有所有14个不同的if else语句,如下所示:

if w == 1:
    i.w1 = match
elif w == 2:
    i.w2 = match
elif w == 3:
    i.w3 = match

并继续经历14.是否有更简单,更有效的方法?我尝试了以下内容,但显然它不起作用:

i.w + '%s' % (w) = match

2 个答案:

答案 0 :(得分:2)

每当你发现自己想要一些变量时,所有这些变量都是相同的,除了不同的数字后缀,这意味着你实际上想要一个列表。

然后,您可以使用文字索引列表,self.w[0]如果您知道您想要第一个元素,或者使用变量self.w[i],如果您在变量中有所需的数字。< / p>

答案 1 :(得分:0)

执行此操作的方法是使用字典。现在已经建议了一个列表,但是指望你的变量具有某种命名约定,匹配索引有点不安全,并且可能会强迫你稍后使用不需要的数据结构。在这方面,字典更灵活一些:

dct = {}
dct[1] = w1
dct[2] = w2
dct[3] = w3
#ect...

然后当你想使用它时,你可以做这样的事情:

match = dct[w]

这样你的关键和价值并不重要。