我对用Python构建经济系统的基于agent的模型感兴趣。典型的模型可能有成千上万的代理(即公司、消费者等)。
典型的公司代理类看起来可能如下所示:
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__的一个合法/可取的用例。
发布于 2014-08-27 16:10:48
__slots__特性特别用于在创建大量实例时节省内存。引用文献化
默认情况下,旧类和新样式类的实例都有用于属性存储的字典.这浪费了很少实例变量的对象的空间。当创建大量实例时,空间消耗会变得非常严重。 可以通过在新样式类定义中定义
__slots__来重写默认值。__slots__声明接受一系列实例变量,并在每个实例中保留足够的空间来保存每个变量的值。因为没有为每个实例创建__dict__,所以节省了空间。
听起来你使用插槽的原因是完全正确的。
不鼓励使用__slots__来实现非动态属性的副作用;您应该使用元类来代替。
https://stackoverflow.com/questions/25532041
复制相似问题