Python學(xué)習(xí)筆記(十六)實(shí)例屬性和類屬性,使用__slots__

實(shí)例屬性和類屬性

>>> class Student(object):

...? ? name = 'Student'

>>> s = Student() # 創(chuàng)建實(shí)例s

>>> print(s.name) # 打印name屬性,因?yàn)閷?shí)例并沒有name屬性,所以會(huì)繼續(xù)查找class的name屬性

Student

>>> print(Student.name) # 打印類的name屬性

Student

>>> s.name = 'Michael' # 給實(shí)例綁定name屬性

>>> print(s.name) # 由于實(shí)例屬性優(yōu)先級(jí)比類屬性高,因此,它會(huì)屏蔽掉類的name屬性

Michael

>>> print(Student.name) # 但是類屬性并未消失,用Student.name仍然可以訪問

Student

>>> del s.name # 如果刪除實(shí)例的name屬性

>>> print(s.name) # 再次調(diào)用s.name,由于實(shí)例的name屬性沒有找到,類的name屬性就顯示出來了

Student

在編寫程序的時(shí)候,千萬不要把實(shí)例屬性和類屬性使用相同的名字,因?yàn)橄嗤Q的實(shí)例屬性將屏蔽掉類屬性,但是當(dāng)你刪除實(shí)例屬性后,再使用相同的名稱,訪問到的將是類屬性。

使用__slots__

為了給所有實(shí)例都綁定方法,可以給class綁定方法

class Student(object):

? ? __slots__ = ('name', 'age') # 用tuple定義允定的屬性名稱

>>> s = Student() # 創(chuàng)建新的實(shí)例

>>> s.name = 'Michael' # 綁定屬性'name'

>>> s.age = 25 # 綁定屬性'age'

>>> s.score = 99 # 綁定屬性'score'

Traceback (most recent call last):

File "", line 1, in <module>

AttributeError: 'Student' object has no attribute 'score'

使用__slots__要注意,__slots__定義的屬性僅對(duì)當(dāng)前類實(shí)例起作用,對(duì)繼承的子類是不起作用的,除非在子類中也定義__slots__,這樣,子類實(shí)例允許定義的屬性就是自身的__slots__加上父類的__slots__。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 基礎(chǔ)1.r''表示''內(nèi)部的字符串默認(rèn)不轉(zhuǎn)義2.'''...'''表示多行內(nèi)容3. 布爾值:True、False(...
    neo已經(jīng)被使用閱讀 1,884評(píng)論 0 5
  • 要點(diǎn): 函數(shù)式編程:注意不是“函數(shù)編程”,多了一個(gè)“式” 模塊:如何使用模塊 面向?qū)ο缶幊蹋好嫦驅(qū)ο蟮母拍?、屬性?..
    victorsungo閱讀 1,697評(píng)論 0 6
  • Python進(jìn)階框架 希望大家喜歡,點(diǎn)贊哦首先感謝廖雪峰老師對(duì)于該課程的講解 一、函數(shù)式編程 1.1 函數(shù)式編程簡(jiǎn)...
    Gaolex閱讀 5,991評(píng)論 6 53
  • 定義類并創(chuàng)建實(shí)例 在Python中,類通過 class 關(guān)鍵字定義。以 Person 為例,定義一個(gè)Person類...
    績(jī)重KF閱讀 4,102評(píng)論 0 13
  • 1. 使用__slots__ 正常情況下,當(dāng)我們定義了一個(gè)class,創(chuàng)建了一個(gè)class的實(shí)例后,我們可以給該實(shí)...
    時(shí)間之友閱讀 324評(píng)論 0 1

友情鏈接更多精彩內(nèi)容