如何将属性列表输入到函数中

时间:2013-09-07 05:59:41

标签: python function class attributes

假设我有一个具有多个属性的类。我想以相同的方式修改一些选择。但是,由于我不能将属性放在列表中,这是相当繁琐的。

例如:

class BOB:
    def __init__(self,name,color,shape):
        self.lenname = len(name)
        self.lencolor = len(color)
        self.lenshape = len(shape)

def BOBmodify_lenname(instance):
    instance.lenname *= 2

def BOBmodify_lencolor(instance):
    instance.lencolor *= 2

def BOBmodify_lenshape(instance):
    instance.lenshape *= 2

我的目标是以一个属性列表的形式输入各种类型,如[lenshape,lencolor],然后有一个迭代列表并将它们乘以2的函数。由于这是不可能的,我必须求助于每个属性的函数

这里,我只有三个属性,我需要三个函数来修改每个属性。对于具有更多属性的类,这很快变得不切实际。如果可能的话会很好:

def BOBmodify(instance,attribute_list):
    for attribute in attribute_list:
        instance.attribute *= 2

然后再做

BOBmodify(bobinstance, [lenname, lenshape])

据我所知,你不能把属性放在列表中,所以这是不可能的。那么我应该如何处理这种情况,我想要一个函数对几个不同的属性做同样的事情?虽然我已经在堆栈溢出和谷歌搜索这个,但没有任何相关的问题出现。请帮忙。谢谢!

1 个答案:

答案 0 :(得分:3)

您可以定义这样的方法,并将属性作为字符串传递:

def modify_attrs(self, attrs):
    for attr in attrs:
        val = getattr(self, attr)
        setattr(self, attr, val*2)

...

bobinstance.modify_attrs(['lenname', 'lenshape']) 

<强>演示:

>>> bobinstance = BOB('spam', 'red', 'square')
>>> bobinstance.__dict__
{'lenshape': 6, 'lencolor': 3, 'lenname': 4}
>>> bobinstance.modify_attrs(['lencolor', 'lenname'])
>>> bobinstance.__dict__
{'lenshape': 6, 'lencolor': 6, 'lenname': 8}