0

我真的没有上课并且使用__slots__有人可以让它更清楚吗?

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

class Empty:
    __slots__ =()

def mkEmpty():
    return Empty()

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

但我不知道如何制作“mkNonEmpty”。我也不确定我的 mkEmpty 函数。

谢谢

编辑:

这就是我最终的结果:

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
4

2 回答 2

6

然后,您必须以传统方式初始化您的类。它将像这样工作:

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。您可以并且应该直接使用类构造函数,如下所示:

ne = NonEmpty(1, 2)

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

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

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

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

于 2013-02-02T20:47:16.373 回答
-2

也许文档会有所帮助?老实说,这听起来不像你需要担心的水平__slots__

于 2013-02-02T20:43:58.213 回答