使用** kwargs设置属性时的Python3 AttributeError

简单地说我明白为什么我不能使用像这样的** 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])

实现你想要的.

上一篇:python – Pickle:AttributeError:’module’对象没有属性


下一篇:python – AttributeError:’_ io.TextIOWrapper’对象没有属性’lower’