# 很特殊的一個(gè)名字,聽著就很有魔法的樣子~~我記得小時(shí)候看過《哈利波特》關(guān)于魔法的電影崖媚,很喜歡亦歉!
# 進(jìn)入正題,面向?qū)ο髮?duì)我來說是一個(gè)很難搞定的一個(gè)東西畅哑,在建立需求的同時(shí)肴楷,一方面考慮怎么呈現(xiàn)出來,另一方面又要注意其中的一些傳參等等各種引用~~~所以這東西可愛又可恨荠呐,因?yàn)橛妹嫦驅(qū)ο缶幊毯芩瑁幸环N很合理的感覺!
#這次來說說其中的魔法方法泥张。
1. __init__();
# Python 的類里提供的呵恢,兩個(gè)下劃線開始,兩個(gè)下劃線結(jié)束的方法媚创,就是魔法方法渗钉,__init__()就是 一個(gè)魔法方法,通常用來做屬性初始化 或 賦值 操作钞钙。
?# 如果類面沒有寫__init__方法鳄橘,Python會(huì)自動(dòng)創(chuàng)建,但是不執(zhí)行任何操作芒炼,?
?# 如果為了能夠在完成自己想要的功能瘫怜,可以自己定義__init__方法,?
?# 所以一個(gè)類里無論自己是否編寫__init__方法 一定有__init__方法焕议。
# 圖中很明顯的可以看出宝磨,該魔法方法可以通過self直接定義屬性弧关,并且自動(dòng)初始化話。
# 說明唤锉;?
__init__() 方法世囊,在創(chuàng)建一個(gè)對(duì)象時(shí)默認(rèn)被調(diào)用,不需要手動(dòng)調(diào)用?
__init__(self) 中的self參數(shù)窿祥,不需要開發(fā)者傳遞株憾,python解釋器會(huì)自動(dòng)把當(dāng)前的對(duì)象引用 傳遞過去。
#注意晒衩;完全可以在類的外面設(shè)置屬性嗤瞎,不過需要定義對(duì)象的時(shí)候傳參。
1. 通過一個(gè)類听系,可以創(chuàng)建多個(gè)對(duì)象贝奇,就好比 通過一個(gè)模具創(chuàng)建多個(gè)實(shí)體一樣
2. __init__(self) 中,默認(rèn)有1個(gè)參數(shù)名字為self靠胜,如果在創(chuàng)建對(duì)象時(shí)傳遞了2個(gè)實(shí)參掉瞳,那 么 __init__(self) 中出了self作為第一個(gè)形參外還需要2個(gè)形參,例如 __init__(self,x,y)
2. __str__()方法浪漠;簡單理解就是自動(dòng)的返回指定的數(shù)據(jù)陕习;
# 程序運(yùn)行就會(huì)看到str里返回的屬性值;
在python中方法名如果是 __xxxx__() 的址愿,那么就有特殊的功能该镣,因此叫做“魔法”方法
?當(dāng)使用print輸出對(duì)象的時(shí)候,默認(rèn)打印對(duì)象的內(nèi)存地址响谓。如果類定義了 __str__(self) 方法损合, 那么就會(huì)打印從在這個(gè)方法中 return 的數(shù)據(jù)?
__str__ 方法通常返回一個(gè)字符串,作為這個(gè)對(duì)象的描述信息歌粥;
3. __del__();
創(chuàng)建對(duì)象后塌忽,python解釋器默認(rèn)調(diào)用 __init__() 方法拍埠;
當(dāng)刪除對(duì)象時(shí)失驶,python解釋器也會(huì)默認(rèn)調(diào)用一個(gè)方法,這個(gè)方法為 __del__() 方法
#?當(dāng)有變量保存了一個(gè)對(duì)象的引用時(shí)枣购,此對(duì)象的引用計(jì)數(shù)就會(huì)加1嬉探;
# 當(dāng)使用del() 刪除變量指向的對(duì)象時(shí),則會(huì)減少對(duì)象的引用計(jì)數(shù)棉圈。如果對(duì)象的引用計(jì)數(shù)不為1涩堤, 那么會(huì)讓這個(gè)對(duì)象的引用計(jì)數(shù)減1,當(dāng)對(duì)象的引用計(jì)數(shù)為0的時(shí)候分瘾,則對(duì)象才會(huì)被真正刪除 (內(nèi)存被回收)胎围。
# 總結(jié);
目前來說,我們常用的也就這些魔法方法白魂,可以很好的解決一些小問題汽纤,并且對(duì)代碼有很好完整性,有一點(diǎn)魔法的感覺了福荸!
# 多說一局蕴坪,環(huán)境成就一個(gè)人,同時(shí)也可以毀滅一個(gè)人敬锐,堅(jiān)持本心背传,相干什么就去干,結(jié)果永遠(yuǎn)是不及過程來的重要台夺!雖說基本上沒什么人來閱讀我寫的顯得粗陋的文章径玖,但是我知道我在進(jìn)步!