python 子類調用父類的三種方法,python中子類調用父類方法幾點細節(正確使用super)


近期在寫python程序時意外發現了子類調用父類方法的一些細節問. 仔細學習做筆記如下:

子類的方法要顯示調用父類的方法,不調用系統不會默認調用(不同於java)

調用方法有3種, 如下面的程序中的標記的 12,13,14 三行(任何一種方法都可以)

 

a) persion.__init__(self, name, age)

b) super(student, self).__init__(name, age)

c) super().__init__(name, age)

 

a方法是傳統的調用方法, b是改進后的方法. 區別是: 當基類的名字有改變時, a方法子類的中的相應代碼也要改. b就不用改了, 所以b方法要好一些. 方便代碼的維護. c方法呢, 是python3.x以上版本用的. 我沒有測試, 應當是可以的

需要注意的是; 如果使用super調用父類方法, 則父類必須是新式類.

新式類:就是所有類都必須繼承的類,如果什么都不想繼承,就繼承到object類

經典類:沒有父類

比如下我下面的代碼3行如果沒有object字樣, 則13行會報錯: TypeError: must be type, not classobj

我寫的試驗程序:

1#!/usr/bin/evn python

2

3class persion():

4 def __init__(self, name, age):

5 self.name = name

6 self.age = age

7 def talk(self):

8 print "i am a persion. name: %s, age: %s" %(self.name, self.age)

9

10class student(persion):

11 def __init__(self, name, age, school):

12 #persion.__init__(self, name, age)

13 super(student, self).__init__(name, age)

14 #super().__init__(name, age)

15 #以上3種方法都可以用. 提供第2行的. 第3行在python3.x版本支持

16 self.school = school

17 def talk(self):

18 print ('i am a student. name: %s, age: %s, school: %s' % (self.name, str(self.age), self.school))

19

20if __name__ == "__main__":

21 aPer = persion("lin", 2)

22 aPer.talk()

23 aStu = student("lin", 3, "MIddleSchool")

24 aStu.talk()

  

結果:

i am a persion. name: lin, age: 2

i am a student. name: lin, age: 3, school: MIddleSchool

 

轉載自:https://blog.csdn.net/weixin_30013175/article/details/116168584


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM