0

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

例如:

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])

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

4

1 回答 1

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}
于 2013-09-07T06:08:31.840 回答