Python 内置的setattr 函数可以动态地设置属性,给定一个对象,一个代表属性名称的字符串,以及一个要分配的值。
内容表
- 需要动态地设置一个属性?
- Python 内置的
setattr函数可以帮上忙。 - 为什么不直接更新
__dict__? - 为什么不调用
__setattr__呢? - 如果你能避免的话,不要使用
setattr - 使用 Python 的
setattr函数进行动态属性赋值
需要动态地设置一个属性?
我们想做一个这样的类。
>>> row = Row(id=4, name="duck", action="quack", color="purple") >>> row.id 4 >>> row.name 'duck'
>>> row = Row(id=4, name="duck", action="quack", color="purple") >>> row.id 4 >>> row.name 'duck'
我们的Row 类应该接受任意数量的关键字参数,并将每个参数分配给一个新的Row 对象上的一个属性。
我们可以使用Python 的** 操作符来捕获任意的关键字参数到一个字典中。
class Row: def __init__(self, **attributes): for attribute, value in attributes.items(): ... # What should we do now?
class Row: def __init__(self, **attributes): for attribute, value in attributes.items(): ... # What should we do now?
但是我们需要一些方法来把我们的Row 对象上的每一个项目存储为一个新的属性。
通常,属性赋值使用= 符号和. 符号。
>>> row.color = "purple"
>>> row.color = "purple"
但是我们不能使用. 符号,因为我们的属性名是用字符串存储的。例如,变量attribute 可能包含字符串"color" (代表我们要分配给的color 属性)。
>>> attribute = "color" >>> value = "purple"
>>> attribute = "color" >>> value = "purple"
而如果我们尝试使用 Python 通常的属性赋值符号。
>>> row.attribute = value
>>> row.attribute = value
我们最终会得到一个叫做attribute 的属性,而不是一个叫做color 的属性。
>>> row.attribute 'purple'
>>> row.attribute 'purple'
我们需要一些方法来动态地分配一个属性!
Python 内置的setattr 函数来拯救我们
Python的setattr 函数接受一个...