我有兴趣在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__
的合法/可取的用例。
答案 0 :(得分:6)
__slots__
功能专门用于在创建大量实例时保存内存。引用__slots__
documenation:
默认情况下,旧式和新式类的实例都有一个属性存储字典。这会浪费具有很少实例变量的对象的空间。在创建大量实例时,空间消耗会变得很严重。
可以通过在新样式类定义中定义
__slots__
来覆盖默认值。__slots__
声明采用一系列实例变量,并在每个实例中保留足够的空间来保存每个变量的值。保存空间是因为没有为每个实例创建__dict__
。
听起来你正在使用插槽完全正确的原因。
不鼓励使用__slots__
作为无动态属性的副作用;你应该使用元类代替。