使用对象而非字典伪对象的好处是什么?
下面的代码可以作为一个例子:
import numpy as np
N = 200
some_prop = np.random.randint(0,100, [N, N, N])
#option 1
class ObjectThing():
def __init__(self, some_prop):
self.some_prop = some_prop
object_thing = ObjectThing(some_prop)
#option 2
pseudo_thing = {'some_prop' : some_prop }
我喜欢选项1提供的结构,这让应用程序的操作更加规范和严谨。不过,我在想是否还有其他我不知道的更明显的好处。
2 个回答
1
如果你在使用一个包含即时编译器的Python版本(比如PyPy),那么使用实际的对象可以帮助编译器更好地优化你的代码。这是因为编译器更容易理解对象的成员是怎么被使用的,而不像普通的字典那样复杂。
使用对象还可以让你创建子类,这样可以省去一些重复的实现工作。
1
使用对象的明显好处是,你可以让它们的功能不仅仅局限于存储数据。比如,你可以有两个属性,然后定义一个 __eq__
方法,这个方法可以用这两个属性做一些其他的事情,而不是仅仅比较它们是否相等,如果不相等就返回 False
。
而且,一旦你定义了一个类,你就可以很容易地创建这个类的新实例,它们会和原来的结构一样。但如果你用字典,就得重新定义这个结构,或者复制原来的字典,然后把每个元素都改成你想要的新值,这样就麻烦多了。
字典的主要优点是它们有很多预定义的方法(比如 .items()
),可以用 in
很方便地遍历,还可以通过字典推导式轻松创建,并且可以通过字符串变量方便地访问数据“成员”(不过其实 getattr
函数在对象中也能实现类似的功能)。