【python】定制類(筆記摘錄)

讓實(shí)例打印出來(lái)好看
__str__
__repr__

class Student(object):
    def __init__(self, name):
        self.name = name
    def __str__(self):
        return 'Student object (name=%s)' % self.name
    __repr__ = __str__
>>> print(Student('Michael'))
Student object (name: Michael)

#沒(méi)有__str__就會(huì)是這樣
#>>> print(Student('Michael'))
#<__main__.Student object at 0x109afb190>

>>> s = Student('Michael')
>>> s
Student object (name: Michael)
#沒(méi)有__repr__就會(huì)是這樣
<__main__.Student object at 0x109afb310>

__iter__
__next__
該方法返回一個(gè)迭代對(duì)象,然后,Python的for循環(huán)就會(huì)不斷調(diào)用該迭代對(duì)象的__next__()方法拿到循環(huán)的下一個(gè)值,直到遇到StopIteration錯(cuò)誤時(shí)退出循環(huán)。

class Fib(object):
    def __init__(self):
        self.a, self.b = 0, 1 # 初始化兩個(gè)計(jì)數(shù)器a,b

    def __iter__(self):
        return self # 實(shí)例本身就是迭代對(duì)象,故返回自己

    def __next__(self):
        self.a, self.b = self.b, self.a + self.b # 計(jì)算下一個(gè)值
        if self.a > 100000: # 退出循環(huán)的條件
            raise StopIteration()
        return self.a # 返回下一個(gè)值
>>> for n in Fib():
...     print(n)
...
1
1
2
3
5
...
46368
75025

__getitem__
Fib實(shí)例雖然能作用于for循環(huán),看起來(lái)和list有點(diǎn)像,但是,把它當(dāng)成list來(lái)使用還是不行
實(shí)現(xiàn)__getitem__()方法就可以按下標(biāo)訪問(wèn)數(shù)列的任意一項(xiàng)
list有個(gè)神奇的切片方法對(duì)于Fib卻報(bào)錯(cuò)。原因是__getitem__()傳入的參數(shù)可能是一個(gè)int,也可能是一個(gè)切片對(duì)象slice,所以要做判斷.
但是沒(méi)有對(duì)step參數(shù)作處理,也沒(méi)有對(duì)負(fù)數(shù)作處理,所以,要正確實(shí)現(xiàn)一個(gè)__getitem__()還是有很多工作要做的。
__getattr__
__call__

class Student(object):
    def __init__(self, name):
        self.name = name

    def __call__(self):
        print('My name is %s.' % self.name)
>>> s = Student('Michael')
>>> s() # self參數(shù)不要傳入
My name is Michael.

通過(guò)callable()函數(shù),我們就可以判斷一個(gè)對(duì)象是否是“可調(diào)用”對(duì)象。

最后編輯于
?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • __str__ 我們先定義一個(gè)Student類,打印一個(gè)實(shí)例:>>> class Student(object):...
    牛崽兒酷閱讀 344評(píng)論 0 0
  • __str__ 這是因?yàn)橹苯语@示變量調(diào)用的不是__str__(),而是__repr__(),兩者的區(qū)別是__str...
    木凜閱讀 244評(píng)論 0 2
  • 我是一粒沙金,一粒人們?nèi)庋蹮o(wú)法識(shí)別的沙金,我的家在大山深處的老坪子。 我同伙伴們就藏身在老坪子的石頭里。原本我以為...
    夢(mèng)想2050閱讀 1,320評(píng)論 1 6
  • 犯懶了三天,啥都沒(méi)寫(xiě)!想孩子了!熊娃兩天木有視頻!第二天電話被告知玩累了!一切安好,勿念 這幾天又開(kāi)始想家了!別來(lái)...
    熊孩子?jì)?/span>閱讀 303評(píng)論 0 0
  • , , , 。 , , , 。 ……
    Yooblue閱讀 195評(píng)論 0 2

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