簡體   English   中英

Python __Slots __(制作和使用)

[英]Python __Slots__ (Making and Using)

我真的沒有上課,可以使用__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

然后,您必須以傳統方式初始化您的類。 它將像這樣工作:

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

您需要了解,僅出於性能/內存原因才需要插槽。 您不需要使用它們,也許也不應使用它們,除非您知道自己的內存有限。 不過,這僅應在實際陷入問題之后。

也許文檔會有所幫助? 老實說,這聽起來好像您並不需要擔心__slots__

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM