3

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

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

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

但是,似乎__slots__通常不鼓励使用。我想知道这是否是__slots__.

4

1 回答 1

6

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

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

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

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

不鼓励使用__slots__no-dynamic-attributes 副作用;您应该为此使用元类。

于 2014-08-27T16:10:48.233 回答