我真的没有上课,使用__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
答案 0 :(得分:5)
然后,您必须以传统方式初始化您的课程。它会像这样工作:
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
您需要了解插槽只是出于性能/内存原因所必需的。您不需要使用它们,也可能不应该使用它们,除非您知道自己受内存限制。这只应该在实际遇到问题之后才会出现。
答案 1 :(得分:-2)
也许the docs会有所帮助?老实说,这听起来并不像你需要担心的__slots__
。