使用对象而非字典伪对象的好处是什么?

4 投票
2 回答
929 浏览
提问于 2025-04-17 17:49

下面的代码可以作为一个例子:

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 函数在对象中也能实现类似的功能)。

撰写回答