我正在创建一个Python类作为通过REST远程管理的对象的API。
REST API包含一个调用,该调用返回定义远程对象属性的字典列表。我正在编写代码以动态添加这些属性作为相应Python对象的属性(即:在实例化类时,对属性列表进行REST查询,然后将每个属性作为属性添加到属性中实例。)
然而,这带回了PHP代码的记忆,我曾经看过那些动态添加到对象的属性并且想“你听说过字典吗?”
鉴于我的背景植根于C / C ++ / Java,这对我来说是一个有点外国的想法,但可能与Python(和PHP)课程相提并论。那么,什么时候动态地将属性添加到对象而不是使用字典呢?
从我在相关材料中看到的内容来看,API似乎是一个合法的案例。
答案 0 :(得分:2)
那就是说,由于以下原因,我通常会有点犹豫不决地为一个对象添加属性:
obj.__dict__
或vars(obj)
或类似的东西。在标准库中添加属性是优先考虑的......这基本上是argparse
填充返回的namespace
所做的事情。我想也许值得问一个问题:“用户会知道哪些属性会被添加到对象中吗?”。如果这个问题的答案是yes
,而你并不担心上面提到的命名空间冲突,那么也许一个简单的对象是合适的,否则,我只会使用一个字典。
答案 1 :(得分:0)
在这样的例子中,我更倾向于重载字典方法 - __getitem__
,__setitem__
,__delitem__
,keys
,{{1} },values
以及其他可能适用的内容。
如果您正式定义用Python表示数据的类,那么使用descriptors对于可读性来说并不是一个糟糕的选择。