假设我有一个具有多个属性的类。我想以相同的方式修改一些选择。但是,由于我不能将属性放在列表中,这是相当繁琐的。
例如:
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])
据我所知,你不能把属性放在列表中,所以这是不可能的。那么我应该如何处理这种情况,我想要一个函数对几个不同的属性做同样的事情?虽然我已经在堆栈溢出和谷歌搜索这个,但没有任何相关的问题出现。请帮忙。谢谢!
答案 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}