[python] 在 python2和3中关于类继承的 super方法简要说明

Posted 51study

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[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

 

以上是关于[python] 在 python2和3中关于类继承的 super方法简要说明的主要内容,如果未能解决你的问题,请参考以下文章

python2.7中关于编码,json格式的中文输出显示

C++中关于类对象的初始化问题

Python 中关于 round 函数的小坑

在 python unittest 中关闭一些打印

python的父类和子类中关于继承的不同版本的写法

Python中关于包的的定义