雨敲窗python_雨敲窗Python:类
http://www.yuqiaochuang.com
類
簡介
面向對象是我們經常能聽到的術語,即class,類。事實上,主角是兩個,一個是類,一個是類實例。人類,是一個類,我們每一個人是一個人類的實例。而類之間又有一些關系,例如,我們既是人類,也是動物,更細化來講,我們是哺乳類動物,靈長類,類似于集合的概念,哺乳動物屬于動物,而在面向對象中我們通常稱哺乳動物是動物的子類。而對于動物這個類來說,會自帶一些屬性,例如:年齡、體重。也會有一些方法:生殖、呼吸。而不同種類的動物(即動物類的各種子類)可能會有不同的屬性或方法,像胎生、卵生,像鳥類的飛行的方法和豹子奔跑的方法。
定義
用關鍵字class去定義一個類,如果沒有指定父類,默認繼承object類。
這樣,我們定義個了一個Human,人類。
類屬性
為什么要叫類屬性呢,因為這個屬性是和類綁定的,并不是和實例綁定的。胎生這個屬性是全人類共有的,并不是某個人特殊擁有的屬性。
實例屬性
我們首先實例化了一個人類human_a,然后給這個人類設置了一個實例屬性name,name這個屬性獨立于其他的人類,是和實例綁定的,所以叫實例屬性。
– 實例屬性可以在實例創建后任意時間設置。
– 一般放在構造函數里init()
類方法
human_a = Human(“alan”) human_a.walk() 運行結果:
alan is walking
類的方法可以看做是一種類屬性,而傳入的第一個參數self,表示調用這個類方法的實例。像上面的例子,human_a調用了walk這個類方法,human_a的名字是alan,所以運行的結果就是alan is walking。
訪問控制
從上面的例子來看,我們可以在外部隨意更改name這個屬性,如果不想讓外部直接訪問到,則在屬性名字前加兩個下劃線__name,這樣從外部就無法直接訪問了。如果還是想訪問,可以再加個get的接口。
如果還是想更改__name字段,可以再加上一個set接口
可能有人會有疑問,為何要這么“畫蛇添足”呢?其不然,這樣會增強代碼的健壯性,直接暴露屬性可能會帶來意想不到的后果,通過接口的方式可以加以控制,例如,我們可以通過set接口去限定name的長度。
這樣就不會出現name過長的情況。
繼承
最開始的簡介里說到,哺乳動物是動物的一種,用面向對象的屬于來說,哺乳動物是動物的子類,子類擁有父類的屬性、方法,即繼承。同時又可以擁有父類沒有的屬性和方法,即多態。 還是以人類為例,通常來說,人類又可以分為男人和女人(當然也有別的,23333)
來,我們看下這個男人,多了一個新的屬性,__has_wife(是否已婚)。我們寫到了Man的構造函數里。其實通常并不這么寫構造函數,假如Human里有很多屬性、很多初始化步驟,我們Man繼承的時候難不成要復制粘貼一遍Human的構造函數?當然不是啦,通常會這么寫。
super(Man, self).__init__(name)等價于調用了父類Human的構造函數,就不用再復制粘貼一遍了。 既然有男人,那就再來個女人吧。
我們都道,男人和女人是不一樣的,通常男人都自帶抽煙、喝酒、燙頭,啊。。。并沒有燙頭。
當然,女人也自帶逛街、化妝等天賦技能。
好了,觀眾朋友們,有沒有感覺到這種繼承的優越性。可以很清晰地看到,男人和女人都有一些相同的屬性,也有一些各自不同的方法。如果哪天人類有了別的方法、屬性,直接在Human類更改,男人和女人也會自動繼承。如果想再設計一個雙性人這個類,那直接從Human繼承就可以了,對男人和女人不會有任何影響。這就是面向對象的優越性啊!
總結
以上是生活随笔為你收集整理的雨敲窗python_雨敲窗Python:类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小胖机器人能刷碗吗_小胖机器人好不好?透
- 下一篇: mysql对数据库进行备份吗_怎么对My