首頁  >  文章  >  後端開發  >  Python 技巧:__slots__ 的魔力

Python 技巧:__slots__ 的魔力

王林
王林原創
2024-08-28 18:32:33698瀏覽

Python Trick: The Magic of __slots__

Python 在動態屬性方面的靈活性是其優勢之一,但有時您希望優化記憶體使用和效能。

輸入,此功能可讓您為類別定義一組固定的屬性,減少記憶體開銷並可能加快屬性存取速度。


它是如何運作的

通常,Python 物件被實作為用於儲存屬性的字典,這可能會導致更高的記憶體消耗。

透過在類別中定義 slots,您可以指示 Python 使用記憶體效率更高的內部結構。

當您事先知道類別將具有的屬性並希望避免完整字典的開銷時,這尤其有用。

這裡示範如何使用老虎機

class Point:
    __slots__ = ['x', 'y']  # Define the allowed attributes

    def __init__(self, x, y):
        self.x = x
        self.y = y


# Create a Point instance
p = Point(10, 20)

print(p.x)  # Output: 10
print(p.y)  # Output: 20

# Attempting to add a new attribute will raise an AttributeError
try:
    p.z = 30
except AttributeError as e:
    print(e)  # Output: 'Point' object has no attribute 'z'

# Output:
# 10
# 20
# 'Point' object has no attribute 'z'

在此範例中,slots 將 Point 類別限制為僅 x 和 y 屬性。

嘗試設定 插槽中未列出的任何屬性會導致屬性錯誤。


為什麼它很酷

使用可以透過消除屬性字典的開銷來顯著節省內存,尤其是在創建大量實例時。

還可以提高屬性存取速度。

但是,請小心: 可能會限制 Python 物件的某些動態功能,並且可能不適合所有用例。

以上是Python 技巧:__slots__ 的魔力的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn