我希望在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'但我不知道该怎么做。
答案 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