简单地说我明白为什么我不能使用像这样的** kwargs的for循环来设置属性:
class Person():
def __init__(self, onevar, *args, **kwargs):
self.onevar = onevar
for k in kwargs:
self.k = kwargs[k]
print(k, self.k)
def run():
ryan = Person('test', 4, 5, 6, name='ryan', age='fifty')
print(ryan.name)
def main():
run()
if __name__=="__main__":
main()
这将返回以下内容:
AttributeError: 'Person' object has no attribute 'name'
谁知道为什么?
解决方法:
当你分配self.k时,你实际上并没有创建一个名为k的属性,你只是重复创建一个名为k的属性.如果我明白你要做什么,你需要更换
self.k = kwargs[k]
同
setattr(self, k, kwargs[k])
实现你想要的.