gpt4 book ai didi

python - 修改 setattr 以将多个属性批量分配给不同的值

转载 作者:行者123 更新时间:2023-12-05 05:26:43 30 4
gpt4 key购买 nike

我试图制作一个可以一次性将多个属性分配给不同值的类。因此,我尝试修改 setattr 来执行此操作。

class hello():
def __setattr__(self,attr,value):
if type(attr) == str:
self.__dict__[attr] = value
elif type(attr) == list:
for item,val in zip(attr,value):
self.__dict__[item] = val
else:
print "Error!!!"

这样我想要的类就会有属性:

>>> hola = hello()
>>> setattr(hola,["a","b"],[1,2])
>>> hola.a
1
>>> hola.b
2

但是这样做会返回

TypeError: attribute name must be string, not 'list'

的确,我可以在类中为这个工作定义一个特殊的方法,比如

def assigner(self, attrlist, valuelist):
for item,value in zip(attrlist,valuelist):
self.__dict__[item] = value

但想知道为什么不能通过 setattr 和最有效的方式来完成这项工作

最佳答案

来自docs on the setattr function :

The arguments are an object, a string and an arbitrary value.

第二个参数必须str

可能的解决方法是定义 __setitem__ 而不是 __setattr__

class hello():
def __setitem__(self, k, v):
self.__dict__.update(zip(k, v) if type(k) is tuple else [(k, v)])

这将允许您以 dict 样式分配值

In [2]: heya = hello()

In [3]: heya['a', 'b'] = [1, 2]

In [4]: heya.a
Out[4]: 1

In [5]: heya.b
Out[5]: 2

仍然,没有什么能阻止你像这样分配它们

In [15]: heya.a, heya.b = [1, 2]

关于python - 修改 setattr 以将多个属性批量分配给不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24264079/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com