? ? ? ? 在昨天子類可以繼承父類的基礎(chǔ)上,其實(shí)還可以給子類單獨(dú)定義屬性和方法,區(qū)別于父類的獨(dú)特屬性和特有方法是子類的特點(diǎn)。代碼如下:
1、以姓名和年齡定義父類及方法;
2、定義子類并添加子類特有屬性及方法;
3、創(chuàng)建子類實(shí)例,調(diào)用實(shí)例及方法實(shí)現(xiàn)名字及特有屬性和特有方法。
1、定義子類時(shí)使用了指定屬性(dog_papa)默認(rèn)值的方式;
2、其他幾乎沒有什么變化,只是在繼承父類屬性時(shí)使用了父類名.__init__(self,name,age)的方式實(shí)現(xiàn)了父類屬性的繼承;
3、定義了子類自己的方法cry,表示小狗在叫;
? ? ? ? 通過運(yùn)行結(jié)果可以看出子類也可以指定自己的屬性,并且可以賦默認(rèn)值;通過2中的方式也可實(shí)現(xiàn)父類屬性的繼承,效果應(yīng)該跟使用super()方法一致;子類定義方法后,創(chuàng)建實(shí)例、調(diào)用方法和父類方式相同。為驗(yàn)證繼承父類的不同方式有相同效果,對(duì)代碼改動(dòng)如下:
? ? ? ? ?二者比較可以發(fā)現(xiàn)方式2更簡(jiǎn)潔直觀,只是句點(diǎn)后的__init__()方法要包含所有的父類屬性(包括self,而super方式卻不需要)。
? ? ? ? ?試一下讓兩種方式并存發(fā)現(xiàn)代碼任然可以運(yùn)行且不沖突:
查閱相關(guān)資料后發(fā)現(xiàn)可以有幾種方式實(shí)現(xiàn)父類的屬性和方法繼承,效果相同。
偶然看到子類繼承父類屬性時(shí)可以不用__init__()方法,但是為了更好地繼承父類的行為且在子類中通常需要初始化新的屬性,這一步驟還是必要的。