第二章:魔法方法

1.什么是魔法方法

魔法方法就是可以給你的類增加特殊功能的方法,通常是系統(tǒng)自定好的已雙下劃線開頭以及雙下劃線結(jié)尾的的方法.如果你自己寫的類重寫了這些方法,那么這個方法就會在特殊的情況下被python調(diào)用,你可以自己定義想要的行為,而這一切都是自動發(fā)生的.例如__init__(),__new__(),__call__(),__getItem__()
注意: 魔法方法和繼承沒有關(guān)系,只要是在一個類中實(shí)現(xiàn)了這些方法,它就會在特殊的情況下被調(diào)用

# encoding:utf-8
__author__ = 'Fioman'
__time__ = '2019/3/14 11:39'


class Company(object):
    def __init__(self, employee_list):
        self.employee = employee_list

    # 讓這個類創(chuàng)建的對象,是可以迭代的,就是可以遍歷的
    def __getitem__(self, item):
        return self.employee[item]


company = Company(['tom', 'bob', 'jane'])
employee = company.employee
for em in employee:
    print(em)

company2 = company
for em in company2:  # 如果company類沒有實(shí)現(xiàn)__getitem__方法,這里會報(bào)錯誤
    print(em)

2.Python常見的魔法方法

1. 字符串表示 __repr__ 和 __str__
區(qū)別:它們都是可以將我們的類對象表示成為一個字符串.但是__str__一般是用來給用戶看的,便于理解.
__repr__一般是用來給程序員看的,在開發(fā)模式下,直接寫一個對象的時候,就會調(diào)用它的__repr__方法.

注意: 如果一個類中既有__str__方法,又有__repr__方法.
一般在調(diào)用print進(jìn)行顯示的時候,會優(yōu)先調(diào)用__str__方法
repr方法一般是表示一個對象的創(chuàng)建信息,程序員可以看懂的方式,比如返回這個對象的繼承關(guān)系等.

2.len函數(shù)的特殊性
我們在使用len(內(nèi)置類型) 比如list,dict,set,tuple的時候,我們的len()一般不會遍歷這些數(shù)據(jù)的個數(shù),因?yàn)檫@些數(shù)據(jù)結(jié)構(gòu)都是C語言實(shí)現(xiàn)的,在內(nèi)部存放一個變量,來時刻記錄著這些容器的大小,所以len會直接返回這個變量的結(jié)果,所以效率是非常高的

?著作權(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)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,689評論 1 32
  • 人總是在遇到事情的時候容易多愁善感,想的多,自然感觸也多。 大娘去世了!其實(shí)我內(nèi)心并沒有多難受的,愿因是她并沒有疼...
    淺吟_低唱閱讀 190評論 0 0
  • 倒數(shù)16天 今天穿了一件棉麻的外搭里面是一個吊帶背心,下面是牛仔褲,可老媽慢悠悠的說不好看!我說我覺得挺好看的!...
    風(fēng)箏2017閱讀 233評論 0 0
  • 斬荊破奴逆風(fēng)飛, 大浪淘盡千層沙, 回首望 零星知音和著歌 來,來,來 并肩笑傲奏廣陵
    縱情嬉戲天地間閱讀 245評論 0 0
  • 備香 一、 “大小姐駕到,統(tǒng)統(tǒng)都閃開” 話音剛落,一個靈巧的身影從草叢中竄出,緊接著就是一個子彈打出。后羿頭頂...
    哇奧喵醬閱讀 802評論 0 1

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