【类不类四】类的继承
? ? Python是一種面向對象的腳本語言,所謂OOP: (Object-oriented programming)面向對象編程是一種方法,
? ? 既然說是面向對象,那么肯定會有類這種東西。下面就來談談類的繼承。
? ? 參考:?http://www.xker.com/page/e2015/05/191327.html
? ? super用法:?http://www.cnblogs.com/lovemo1314/archive/2011/05/03/2035005.html
???1.單繼承
? 常見并且常用的是單繼承,也就是只繼承一個父類。
1 # coding: utf-8 2 3 class Parent(object): 5 # __init__是構造函數,為創建對象/類初始化時首先執行的方法 6 def __init__(self): 7 self.parent = u"父類的屬性" 8 print u"來自父類的構造函數" 9 10 def test(self, message): 11 print message + u", 來自父類的test方法" 12 13 class Children(Parent): 15 def __init__(self): 16 # 調用父類的構造函數 17 Parent.__init__(self) 18 19 def test(self, message): 20 # 調用父類的test方法" 21 Parent.test(self, message) 22 23 c = Children() 24 c.test(u"吾乃子類") 25 print c.parent? ? 注意: 若是子類Children沒有引用父類的構造函數__init__()的話,那么是無法使用它在該函數下定義的實例變量
self.parent的。
? ? 上面是一種寫法,缺點就是,如果子類Chidren的父類換了的話,那么,子類就要這樣改動了。
# 子類class Children(A):def __init__(self):A.__init__(self) # Parent —> Adef test(self, message):A.test(self, message) # Parent —>A? ? 如果是代碼量比較少的話,還可以手動來。可惜的是,大多時候都不是這樣的情況。
? ??因此,自Python 2.2開始,Python添加了一個關鍵字super,來解決這個問題。
? ? 用法如下(不適用于Python 3.x版):
? ? class C(B):
?????? def meth(self, arg):
?????????? super(C, self).meth(arg)
?
? ? ?下面我們用super來修改下上面的代碼
1 # coding: utf-8 2 3 class Parent(object): 4 # __init__是構造函數,為創建對象/類初始化時首先執行的方法 5 def __init__(self): 6 self.parent = u"父類的屬性" 7 print u"來自父類的構造函數" 8 9 def test(self, message): 10 print message + u", 來自父類的test方法" 11 12 class Children(Parent): 13 # 調用父類的構造函數 14 def __init__(self): 15 super(Children, self).__init__() 16 17 # 調用父類的test方法" 18 def test(self, message): 19 super(Children, self).test(message) 20 21 c = Children() 22 c.test(u"吾乃子類") super繼承? ? 輸出結果都是一樣的
?
轉載于:https://www.cnblogs.com/Ruby517/p/6113458.html
總結
以上是生活随笔為你收集整理的【类不类四】类的继承的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Eclipse用户使用IntelliJ
- 下一篇: redis 安装使用