python的__slots__ 、__call__

由于Python是動態(tài)語言,任何實(shí)例在運(yùn)行期都可以動態(tài)地添加屬性。如果要限制添加的屬性,例如,Student類只允許添加?name、gender和score?這3個屬性,就可以利用Python的一個特殊的__slots__來實(shí)現(xiàn)。顧名思義,__slots__是指一個類允許的屬性列表:

class Student(object):

? ? __slots__ = ('name', 'gender', 'score')

? ? def __init__(self, name, gender, score):

? ? ? ? self.name = name

? ? ? ? self.gender = gender

? ? ? ? self.score = score

現(xiàn)在,對實(shí)例進(jìn)行操作:

>>> s = Student('Bob', 'male', 59)

>>> s.name = 'Tim' # OK

>>> s.score = 99 # OK

>>> s.grade = 'A'

Traceback (most recent call last):

? ...

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

__slots__的目的是限制當(dāng)前類所能擁有的屬性,如果不需要添加任意動態(tài)的屬性,使用__slots__也能節(jié)省內(nèi)存。

---------------------------------------------------------------------------------------------------------------------

所有的函數(shù)都是可調(diào)用對象。

一個類實(shí)例也可以變成一個可調(diào)用對象,只需要實(shí)現(xiàn)一個特殊方法__call__()。

class Person():

????def __init__(self, name, gender):

????????self.name = name

????????self.gender = gender

????def __call__(self, friend):

????????print('My name is %s...' %self.name)

????????print('My friend is %s...' % friend)

現(xiàn)在可以對?Person?實(shí)例直接調(diào)用:

p = Person('Bob', 'male')

p('Tim')

單看?p('Tim')你無法確定?p?是一個函數(shù)還是一個類實(shí)例,所以,在Python中,函數(shù)也是對象,對象和函數(shù)的區(qū)別并不顯著。

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

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

  • 18.1python中的特殊方法 1、python能夠?qū)⑷我庾兞孔兂蓅tr是因?yàn)槿魏螖?shù)據(jù)類型的實(shí)例都有一個特殊方法...
    橙子愛上檸檬閱讀 427評論 0 0
  • 一、快捷鍵 ctr+b 執(zhí)行ctr+/ 單行注釋ctr+c ...
    o_8319閱讀 6,014評論 2 16
  • 教程地址:python進(jìn)階 - 慕課網(wǎng) python函數(shù)式編程 變量可以指向函數(shù): f = absprint(f)...
    竹口小生閱讀 673評論 0 2
  • 要點(diǎn): 函數(shù)式編程:注意不是“函數(shù)編程”,多了一個“式” 模塊:如何使用模塊 面向?qū)ο缶幊蹋好嫦驅(qū)ο蟮母拍?、屬性?..
    victorsungo閱讀 1,694評論 0 6
  • 基礎(chǔ)1.r''表示''內(nèi)部的字符串默認(rèn)不轉(zhuǎn)義2.'''...'''表示多行內(nèi)容3. 布爾值:True、False(...
    neo已經(jīng)被使用閱讀 1,879評論 0 5

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