首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在用Python编写的基于代理的模型中使用__slots__

在用Python编写的基于代理的模型中使用__slots__
EN

Stack Overflow用户
提问于 2014-08-27 16:09:10
回答 1查看 172关注 0票数 3

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

典型的公司代理类看起来可能如下所示:

代码语言:javascript
复制
class Firm(object):

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

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

代码语言:javascript
复制
class Firm(object):
    __slots__ = ('capital', 'labor', 'productivity')

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

然而,它看起来__slots__的使用通常是不鼓励的。我想知道这是否是__slots__的一个合法/可取的用例。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-27 16:10:48

__slots__特性特别用于在创建大量实例时节省内存。引用文献化

默认情况下,旧类和新样式类的实例都有用于属性存储的字典.这浪费了很少实例变量的对象的空间。当创建大量实例时,空间消耗会变得非常严重。 可以通过在新样式类定义中定义__slots__来重写默认值。__slots__声明接受一系列实例变量,并在每个实例中保留足够的空间来保存每个变量的值。因为没有为每个实例创建__dict__,所以节省了空间。

听起来你使用插槽的原因是完全正确的。

不鼓励使用__slots__来实现非动态属性的副作用;您应该使用元类来代替。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25532041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档