Python類中的魔法方法之 __slots__原理解析
在類中每次實(shí)例化一個(gè)對(duì)象都會(huì)生產(chǎn)一個(gè)字典來保存一個(gè)對(duì)象的所有的實(shí)例屬性,這樣非常的有用處,可以使我們?nèi)我獾娜ピO(shè)置新的屬性。
每次實(shí)例化一個(gè)對(duì)象python都會(huì)分配一個(gè)固定大小內(nèi)存的字典來保存屬性,如果對(duì)象很多的情況下會(huì)浪費(fèi)內(nèi)存空間。
可通過__slots__方法告訴python不要使用字典,而且只給一個(gè)固定集合的屬性分配空間
class Foo(object): __slots__ = ("x","y","z") def __init__(self,x,y): self.x = x self.y = y self.z = None def tell_info(self,name): return getattr(self,name) c = Foo(10,20) # 設(shè)置和獲取__slots__中設(shè)置的可訪問實(shí)例屬性 print(c.tell_info("x")) # 結(jié)果:10 c.z=50 print(c.tell_info("z")) # 結(jié)果:50 # 設(shè)置一個(gè)不在__slots__中存在的屬性,會(huì)報(bào)錯(cuò) c.e = 70 # AttributeError: 'Foo' object has no attribute 'e' # 訪問對(duì)象.__dict__ 也會(huì)直接報(bào)錯(cuò) print(c.__dict__) # AttributeError: 'Foo' object has no attribute '__dict__'
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
pyspark連接mysql數(shù)據(jù)庫報(bào)錯(cuò)的解決
本文主要介紹了pyspark連接mysql數(shù)據(jù)庫報(bào)錯(cuò)的解決,因?yàn)閟park中缺少連接MySQL的驅(qū)動(dòng)程序,下面就來介紹一下解決方法,感興趣的可以了解一下2023-11-11python錯(cuò)誤調(diào)試及單元文檔測(cè)試過程解析
這篇文章主要介紹了python錯(cuò)誤調(diào)試及單元文檔測(cè)試過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12Python時(shí)間和字符串轉(zhuǎn)換操作實(shí)例分析
這篇文章主要介紹了Python時(shí)間和字符串轉(zhuǎn)換操作,結(jié)合實(shí)例形式分析了Python時(shí)間的格式化輸出、時(shí)間戳轉(zhuǎn)換、datetime轉(zhuǎn)換字符串等相關(guān)操作技巧,需要的朋友可以參考下2019-03-03Python模塊MarkupPy與自定義html報(bào)告詳解
MarkupPy是Python模塊用于生成HTML和XML格式的字符串,它的主要作用是提供了一種比原生HTML/XML更加易讀和易寫的編寫方式,通過Python代碼來生成HTML或XML代碼,這篇文章主要介紹了Python模塊MarkupPy&自定義html報(bào)告的相關(guān)知識(shí),需要的朋友可以參考下2023-07-07Python的Pandas庫中使用DataFrame篩選和刪除含特定值的行與列
Pandas是一個(gè)強(qiáng)大的數(shù)據(jù)處理庫,提供了各種功能來操作和處理數(shù)據(jù),這篇文章主要給大家介紹了關(guān)于Python的Pandas庫中使用DataFrame篩選和刪除含特定值的行與列的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-05-05Python+Pygame實(shí)戰(zhàn)之炫舞小游戲的實(shí)現(xiàn)
提到QQ炫舞,可能很多人想到的第一個(gè)詞是“青春”?;腥婚g,這個(gè)承載了無數(shù)人回憶與時(shí)光的游戲品牌,已經(jīng)走到了第十幾個(gè)年頭。今天小編就來給大家嘗試做一款簡(jiǎn)單的簡(jiǎn)陋版的小游戲——《舞動(dòng)青春*炫舞》,感興趣的可以了解一下2022-12-12