何时适合动态添加属性到Python对象?

时间:2013-01-22 19:41:12

标签: python class rest attributes

我正在创建一个Python类作为通过REST远程管理的对象的API。

REST API包含一个调用,该调用返回定义远程对象属性的字典列表。我正在编写代码以动态添加这些属性作为相应Python对象的属性(即:在实例化类时,对属性列表进行REST查询,然后将每个属性作为属性添加到属性中实例。)

然而,这带回了PHP代码的记忆,我曾经看过那些动态添加到对象的属性并且想“你听说过字典吗?”

鉴于我的背景植根于C / C ++ / Java,这对我来说是一个有点外国的想法,但可能与Python(和PHP)课程相提并论。那么,什么时候动态地将属性添加到对象而不是使用字典呢?

从我在相关材料中看到的内容来看,API似乎是一个合法的案例。

2 个答案:

答案 0 :(得分:2)

免责声明:我对REST一无所知......

那就是说,由于以下原因,我通常会有点犹豫不决地为一个对象添加属性:

  • 由于名称空间冲突,您可能会意外地替换一些您不想替换的数据
  • 字典更容易检查,而不必通过obj.__dict__vars(obj)或类似的东西。

在标准库中添加属性是优先考虑的......这基本上是argparse填充返回的namespace所做的事情。我想也许值得问一个问题:“用户会知道哪些属性会被添加到对象中吗?”。如果这个问题的答案是yes,而你并不担心上面提到的命名空间冲突,那么也许一个简单的对象是合适的,否则,我只会使用一个字典。

答案 1 :(得分:0)

在这样的例子中,我更倾向于重载字典方法 - __getitem____setitem____delitem__keys,{{1} },values以及其他可能适用的内容。

如果您正式定义用Python表示数据的类,那么使用descriptors对于可读性来说并不是一个糟糕的选择。