在python 27中如何使用** kwargs在类中定义成员变量?

时间:2015-09-21 21:15:09

标签: class python-2.7 member kwargs

我希望在Python27中使用**定义对象类的成员变量,但是当我运行以下代码时它不起作用。

class Object:
    def __init__(self, *args, **kwargs):
        for k, v in kwargs.iteritems():
            self.k = v
            print str(k) + " " + str(v) + " " + str(self.k)
        print str(self.x)
        print str(self.y)
        print self.name

Player = Object(x=10, y=10, name="Player")

我确切地知道问题是什么,因为我打电话

print str(self.k)

它打印循环中的最后一个条目。因此,我很确定正在发生的事情是当k是关键' name'而v是值"播放器"它正在分配"播放器"到一个新的成员变量' self.k'而不是' self.name'但我不知道该怎么做。

1 个答案:

答案 0 :(得分:1)

要设置名称仅在运行时已知的成员变量,您应该使用setattr()内置函数。

  

class HTTPBasicAuth(AuthBase): """Attaches HTTP Basic Authentication to the given Request object.""" def __init__(self, username, password): self.username = username self.password = password def __call__(self, r): r.headers['Authorization'] = _basic_auth_str(self.username, self.password) return r

     

这是setattr(object, name, value)的对应物。该   arguments是一个对象,一个字符串和一个任意值。字符串   可以命名现有属性或新属性。功能   如果对象允许,则将值赋给属性。对于   例如,getattr()相当于setattr(x, 'foobar', 123)

在你的情况下:

x.foobar = 123