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é)果,所以效率是非常高的