首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python __Slots__ (制作和使用)

Python __Slots__ (制作和使用)
EN

Stack Overflow用户
提问于 2013-02-03 04:22:39
回答 2查看 1.2K关注 0票数 0

我真的不太明白如何创建一个类并使用__slots__,有没有人能让它更清晰呢?

例如,我正在尝试创建两个类,一个是空的,另一个不是。到目前为止,我得到了:

代码语言:javascript
复制
class Empty:
    __slots__ =()

def mkEmpty():
    return Empty()

class NonEmpty():
    __slots__ = ('one', 'two')

但我不知道该怎么做"mkNonEmpty“。我也不确定我的mkEmpty函数。

谢谢

编辑:

这就是我最终得到的结论:

代码语言:javascript
复制
class Empty:
    __slots__ =()

def mkEmpty():
    return Empty()

class NonEmpty():
    __slots__ = ('one', 'two')

def mkNonEmpty(one,two):
    p = NonEmpty()
    p.one= one
    p.two= two
    return p
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-03 04:47:16

然后,您必须以传统方式初始化您的类。它的工作原理如下:

代码语言:javascript
复制
class Empty:
    __slots__ =()

def mkEmpty():
    return Empty()

class NonEmpty():
    __slots__ = ('one', 'two')

    def __init__(self, one, two):
        self.one = one
        self.two = two

def mkNonEmpty(one, two):
    return NonEmpty(one, two)

实际上,构造函数是不必要的,也不是pythonic式的。您可以并且应该直接使用类构造函数,如下所示:

代码语言:javascript
复制
ne = NonEmpty(1, 2)

如果需要的是某种记录,也可以使用空构造函数并直接在应用程序中设置槽

代码语言:javascript
复制
class NonEmpty():
    __slots__ = ('one', 'two')

n = NonEmpty()
n.one = 12
n.two = 15

您需要了解,插槽只是出于性能/内存的原因才是必需的。您不需要使用它们,也可能不应该使用它们,除非您知道自己是内存受限的。不过,这应该只是在遇到问题之后才会发生。

票数 6
EN

Stack Overflow用户

发布于 2013-02-03 04:43:58

也许the docs能帮上忙?老实说,听起来你还没有达到需要担心__slots__的地步。

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

https://stackoverflow.com/questions/14666138

复制
相关文章

相似问题

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