[python] 在 python2和3中關於類繼承的 super方法簡要說明


下面舉一個例子,同樣的代碼使用 python2 和 python3 寫的,大家注意兩段程序中紅色加粗的部分:

python2的類繼承使用super方法:

 1 #-*-  coding:utf-8 -*-
 2 '''
 3 Created on 2018年8月27日
 4 
 5 @author: anyd
 6 '''
 7 import random as r
 8 
 9 class Fish(object):
10     def __init__(self):
11         self.x = r.randint(0, 10)
12         self.y = r.randint(0, 10)
13             
14     def move(self):
15         #這里主要演示類的繼承機制,就不考慮檢查場景邊界和移動方向的問題
16         #假設所有魚都是一路向西游
17         self.x -= 1
18         print "我的位置是:", self.x, self.y
19 
20 class Goldfish(Fish):
21     pass
22 
23 class Carp(Fish):
24     pass
25 
26 class Salmon(Fish):
27     pass
28 
29 #上邊幾個都是食物,食物不需要有個性,所以直接繼承Fish類的全部屬性和方法即可
30 #下邊定義鯊魚類,這個是吃貨,除了繼承Fish類的屬性和方法,還要添加一個吃的方法
31 
32 class Shark(Fish):
33     def __init__(self):
34         super(Shark,self).__init__() 35         self.hungry = True
36 
37     def eat(self):
38         if self.hungry:
39             print "吃貨的夢想就是天天有的吃^_^"
40             self.hungry = False
41         else:
42             print "太撐了,吃不下了!"
43             
44 aa = Shark()
45 aa.move()

輸出如下:

我的位置是: 8 2

  

python3的類繼承使用super方法:

 1 #-*-  coding:utf-8 -*-
 2 '''
 3 Created on 2018年8月27日
 4 
 5 @author: anyd
 6 '''
 7 import random as r
 8 
 9 class Fish(object):
10     def __init__(self):
11         self.x = r.randint(0, 10)
12         self.y = r.randint(0, 10)
13             
14     def move(self):
15         #這里主要演示類的繼承機制,就不考慮檢查場景邊界和移動方向的問題
16         #假設所有魚都是一路向西游
17         self.x -= 1
18         print ("我的位置是:", self.x, self.y)
19 
20 class Goldfish(Fish):
21     pass
22 
23 class Carp(Fish):
24     pass
25 
26 class Salmon(Fish):
27     pass
28 
29 #上邊幾個都是食物,食物不需要有個性,所以直接繼承Fish類的全部屬性和方法即可
30 #下邊定義鯊魚類,這個是吃貨,除了繼承Fish類的屬性和方法,還要添加一個吃的方法
31 
32 class Shark(Fish):
33     def __init__(self):
34         super().__init__() 35         self.hungry = True
36 
37     def eat(self):
38         if self.hungry:
39             print ("吃貨的夢想就是天天有的吃^_^")
40             self.hungry = False
41         else:
42             print ("太撐了,吃不下了!")
43             
44 aa = Shark()
45 aa.move()

輸出如下:

我的位置是: 7 4

  

super方法具體使用注意事項可以參考官方的指導文檔,里面有詳細的使用例子,但個人覺得這種super方法不太容易讓人看得舒服,個人比較偏好采用未綁定的方法來寫,這樣就不管是python2 還是 python3,都是沒有問題的。如下:

1 class Shark(Fish):
2     def __init__(self):
3         Fish.__init__(self) 4         self.hungry = True

 


免責聲明!

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



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