0

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

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

然而,这让我想起了 PHP 代码,我曾经看过动态添加属性到对象并想“你听说过字典吗??”

鉴于我的背景植根于 C/C++/Java,这对我来说有点陌生,但对于 Python(和 PHP)课程来说可能是标准的。那么,什么时候适合动态地向对象添加属性而不是使用字典呢?

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

4

2 回答 2

2

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

也就是说,出于以下原因,我通常会有点犹豫是否愿意向对象添加属性:

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

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

于 2013-01-22T19:45:37.893 回答
0

在这样的示例中,我更倾向于重载字典方法—— __getitem__, __setitem__, __delitem__, keys, values,items以及任何其他可能适用的方法。

如果您正在正式定义类来表示 Python 中的数据,那么使用描述符对于可读性来说并不是一个坏选择。

于 2013-01-22T19:54:42.547 回答