最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python?魔法方法之?__?slots?__的實現(xiàn)

 更新時間:2023年03月01日 08:34:19   作者:go&Python  
本文主要介紹了python?魔法方法之?__?slots?__的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧

__ slots __

__slots__是python class的一個特殊attribute,能夠節(jié)省內(nèi)存空間。正常情況下,一個類的屬性是以字典的形式來管理, 每個類都會有__ dict__ 方法。但是我們可以通過 設(shè)置 __ slots__ 來將類的屬性構(gòu)造成一個靜態(tài)的數(shù)據(jù)結(jié)構(gòu)來管理,里面存儲的是 value references。

class Bar(object):
    def __init__(self, a):
        self.a = a


class BarSlotted(object):
    __slots__ = "a",

    def __init__(self, a):
        self.a = a


# create class instance
bar = Bar(1)
bar_slotted = BarSlotted(1)

print(set(dir(bar)) - set(dir(bar_slotted)))
# {'__dict__', '__weakref__'}   
'''
使用 __slots__ 后, 類里面會減少 __dict__  __weakref__ 兩個方法。
__weakref__  --- 弱引用  詳情鏈接 https://docs.python.org/zh-cn/3/library/weakref.html
'''

優(yōu)點:

  • 節(jié)約內(nèi)存,不用去定義動態(tài)數(shù)據(jù)接口 __ dict__ 的內(nèi)存, __ weakref__ 也不用去申請
  • access attributes 更快,靜態(tài)數(shù)據(jù)結(jié)構(gòu),比__ dict__ 更快

缺點:

定義死后,不能去申請新的屬性,申請會報屬性錯誤

在這里插入圖片描述

可以通過 把 __ dict__ 作為 __ slots__ 的一個屬性,實現(xiàn)既能通過定義__ slots__ 節(jié)約內(nèi)存,又實現(xiàn)新屬性的定義。

class BarSlotted(object):
    __slots__ = "a",'__dict__'

    def __init__(self, a):
        self.a = a
        
bar_slotted = BarSlotted(1)
bar_slotted.b = "111"

當你事先知道class的attributes的時候,建議使用slots來節(jié)省memory以及獲得更快的attribute access。

注意不應(yīng)當用來限制__slots__之外的新屬性作為使用__slots__的原因,可以使用裝飾器以及反射的方式來實現(xiàn)屬性控制。

注意事項

子類會繼承父類的 __ slots__

class Parent(object):
    __slots__ = "x", "y"


class Child(Parent):
    __slots__ = "z",
    # 重復(fù)的 x, y 可以不寫,
    # __slots__ = "x", "y", "z"


child = Child()
print(dir(child)) 
# [..., 'x', 'y', 'z']

不支持多繼承, 會直接報錯

class ParentA(object):
    __slots__ = "x",


class ParentB(object):
    __slots__ = "y",


class Child(ParentA, ParentB):
    pass

'''
Traceback (most recent call last):
  File "C:/Users/15284/PycharmProjects/pythonProject/test.py", line 69, in <module>
    class Child(ParentA, ParentB):
TypeError: multiple bases have instance lay-out conflict
'''

只允許父類中有一方設(shè)定了 __ slots__

class AbstractA(object):
  __slots__ = ()

class AbstractB(object):
  __slots__ = "x"

class Child(AbstractA, AbstractB):
  __slots__ = "x", "y"

新版本的 pickle中的 pickle含有slotted class,使用時需要注意

到此這篇關(guān)于python 魔法方法之 __ slots __的實現(xiàn)的文章就介紹到這了,更多相關(guān)python __ slots __內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python用10行代碼實現(xiàn)對黃色圖片的檢測功能

    python用10行代碼實現(xiàn)對黃色圖片的檢測功能

    這篇文章主要介紹了python用10行代碼實現(xiàn)對黃色圖片的檢測功能,涉及Python基于圖片庫PIL對圖片的檢測技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-08-08
  • Python輸出9*9乘法表的方法

    Python輸出9*9乘法表的方法

    這篇文章主要介紹了Python輸出9*9乘法表的方法,提供了兩種常用方法供大家參考借鑒,需要的朋友可以參考下
    2015-05-05
  • 淺談python中的正則表達式(re模塊)

    淺談python中的正則表達式(re模塊)

    本篇文章主要介紹了淺談python中的正則表達式(re模塊),通過內(nèi)嵌集成re模塊,程序媛們可以直接調(diào)用來實現(xiàn)正則匹配,有興趣的可以了解一下
    2017-10-10
  • 如何使用python自帶IDLE的幾種方法

    如何使用python自帶IDLE的幾種方法

    這篇文章主要介紹了如何使用python自帶IDLE的幾種方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2020-10-10
  • python sort、sort_index方法代碼實例

    python sort、sort_index方法代碼實例

    這篇文章主要介紹了python sort、sort_index方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2019-03-03
  • python中匿名函數(shù)的應(yīng)用方法

    python中匿名函數(shù)的應(yīng)用方法

    這篇文章主要介紹了python中匿名函數(shù)的應(yīng)用方法,匿名函數(shù)是無需使用def定義的函數(shù),只需使用關(guān)鍵字lambda進行聲明,且只可使用一次,只有一個返回值,需要的朋友可以參考下
    2023-07-07
  • OpenCV-Python使用分水嶺算法實現(xiàn)圖像的分割與提取

    OpenCV-Python使用分水嶺算法實現(xiàn)圖像的分割與提取

    在圖像的處理過程中,經(jīng)常需要從圖像中將前景對象作為目標圖像分割或者提取出來。本文就介紹了使用分水嶺算法實現(xiàn)圖像的分割與提取,感興趣的可以了解一下
    2021-06-06
  • Python實現(xiàn)多張圖片合成文字的效果

    Python實現(xiàn)多張圖片合成文字的效果

    前段時間看到有人問如何使用Python實現(xiàn)多張圖片組成文字的效果?覺得還挺有意思,于是嘗試做了一下,剛好趕上端午節(jié),所以打算從網(wǎng)上下載1000張王心凌的照片,組成端午安康的字樣,感興趣的可以了解一下
    2022-06-06
  • python基礎(chǔ)之包的導(dǎo)入和__init__.py的介紹

    python基礎(chǔ)之包的導(dǎo)入和__init__.py的介紹

    這篇文章主要介紹了python基礎(chǔ)之包的導(dǎo)入和__init__.py的相關(guān)資料,需要的朋友可以參考下
    2018-01-01
  • python的移位操作實現(xiàn)詳解

    python的移位操作實現(xiàn)詳解

    這篇文章主要介紹了ppython的移位操作實現(xiàn)詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友可以參考下
    2019-08-08

最新評論

沙田区| 江油市| 满城县| 西充县| 龙门县| 米脂县| 苍梧县| 甘泉县| 江源县| 高邮市| 兴海县| 抚宁县| 朝阳县| 休宁县| 宿松县| 柘荣县| 洛宁县| 屏南县| 新丰县| 雷州市| 崇义县| 灌云县| 张北县| 洛扎县| 咸宁市| 高淳县| 澜沧| 乐亭县| 翼城县| 秀山| 平远县| 新干县| 哈密市| 梓潼县| 阿尔山市| 宁夏| 满城县| 樟树市| 前郭尔| 遂昌县| 恩平市|