【问题标题】:Use of __slots__ in an agent-based model written in Python在用 Python 编写的基于代理的模型中使用 __slots__
【发布时间】:2014-10-21 07:50:17
【问题描述】:

我有兴趣在 Python 中构建 agent-based models 的经济系统。典型的模型可能有成千上万的代理(即公司、消费者等)。

典型的公司代理类可能类似于:

class Firm(object):

    def __init__(capital, labor, productivity):
        self.capital = capital
        self.labor = labor
        self.productivity = productivity

在我的大多数模型中,属性不是动态创建的,因此我可以使用 __slots__ 编写类:

class Firm(object):
    __slots__ = ('capital', 'labor', 'productivity')

    def __init__(capital, labor, productivity):
        self.capital = capital
        self.labor = labor
        self.productivity = productivity

但是,seems 通常不鼓励使用 __slots__。我想知道这是否是 __slots__ 的合法/可取用例。

【问题讨论】:

    标签: python agent agent-based-modeling


    【解决方案1】:

    __slots__ 功能专门用于在创建大量实例时节省内存。引用__slots__ documenation

    默认情况下,旧式和新式类的实例都有一个用于属性存储的字典。这浪费了具有很少实例变量的对象的空间。创建大量实例时,空间消耗会变得非常严重。

    可以通过在新样式类定义中定义__slots__ 来覆盖默认值。 __slots__ 声明采用一系列实例变量,并在每个实例中保留足够的空间来保存每个变量的值。节省空间是因为__dict__ 不是为每个实例创建的。

    听起来您使用插槽是出于完全正确的原因

    不鼓励使用__slots__ 来获得无动态属性的副作用;您应该为此使用元类。

    【讨论】:

      猜你喜欢
      • 2019-05-02
      • 2017-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-03
      • 2010-11-12
      • 1970-01-01
      • 2020-12-26
      相关资源
      最近更新 更多