python之类与对象(5)

6. 类的多继承与超继承

6.1 多继承

python的类还有一个特点,就是可以继承多个类。但是我们作为测试人员,在实际中很少用到这个多继承,这里不就详细(一直都不详细,hhhh)写了。上代码:

 1 #!/usr/bin/python3
 2 # -*- coding: utf-8 -*-
 3 # @Time     :2018/12/5 13:43
 4 # @Author   :Yosef
 5 # @Email    :wurz529@foxmail.com
 6 # @File:    :多继承.py
 7 # @Software :PyCharm Community Edition
 8 class A:
 9     def add(self,a,b):
10         self.a = int(a)
11         self.b = int(b)
12         return a+b
13 
14 
15 class B:
16     def sub(self, a, b):
17         self.a = int(a)
18         self.b = int(b)
19         return a - b
20 
21 class C(A,B):
22     pass
23 
24 c=C()
25 result1=c.add(1,2)
26 result2=c.sub(3,1)
27 print(result1,result2)

在这个例子中,C既继承A又继承了B,也就是继承了A,B所有的方法,在实例C之后,我们可以直接去调用AB的方法。上面看到的是,AB两个类的类方法不同,如果有类方法相同的呢?

 1 #!/usr/bin/python3
 2 # -*- coding: utf-8 -*-
 3 # @Time     :2018/12/5 13:43
 4 # @Author   :Yosef
 5 # @Email    :wurz529@foxmail.com
 6 # @File:    :多继承.py
 7 # @Software :PyCharm Community Edition
 8 class A:
 9     def add(self,a,b):
10         self.a = int(a)
11         self.b = int(b)
12         print("Class A")
13         return a+b
14 
15 
16 class B:
17     def add(self,a,b):
18         self.a = int(a)
19         self.b = int(b)
20         print("Class B")
21         return a+b
22 
23     def sub(self, a, b):
24         self.a = int(a)
25         self.b = int(b)
26         return a - b
27 
28 class C(A,B):
29     pass
30 
31 c=C()
32 result1=c.add(1,2)
33 # result2=c.sub(3,1)
34 print(result1)

结果就是调用的是A的方法,多继承调用,出现同名方法时,会按照顺序优先调用前面父类的同名方法。

6.2 超继承

一听这个名字就很NB。超继承其实也是重写方法的一种,它做的事,就是在类方法中既继承父类的所有特性,也有子类的新特性。超继承用super关键字。继续用工程师来做例子。

阿西吧,真被这个例子搞得头昏脑胀,语法记不住了。好在终于调好了。且看以下代码:

 1 #!/usr/bin/python3
 2 # -*- coding: utf-8 -*-
 3 # @Time     :2018/12/4 16:03
 4 # @Author   :Yosef
 5 # @Email    :wurz529@foxmail.com
 6 # @File:    :SoftwareTestEngineer.py
 7 # @Software :PyCharm Community Edition
 8 class SoftwareTestEngineer:
 9     def __init__(self,name,age):
10         self.name = name
11         self.age = age
12 
13     def basic_skill(self):
14         print(self.name+"今年"+str(self.age)+"岁,会简单的功能测试。。")
15 
16     def salary(self, salary):
17         print("薪资大概是%s" % salary)
18 
19 class JuniorSoftwareTestEngineer(SoftwareTestEngineer):
20 
21     def basic_skill(self):
22         print(self.name+"今年"+str(self.age)+"岁,会写自动化测试脚本。。")
23 
24     def code(self):
25         print(self.name+"也会写代码哦")
26 
27 class SeniorSoftwareTestEngineer(JuniorSoftwareTestEngineer):
28     def code(self):
29         super(SeniorSoftwareTestEngineer, self).code()
30         print(self.name+"也可以做开发")
31 
32 
33 
34 ding = SeniorSoftwareTestEngineer("Ding","25")
35 # ding.code()
36 ding.code()

super类写的是子类的类名,顺着子类的类名找到对应的父类,并调用父类的方法,实现超继承。

super(子类名,self).方法名

 

posted @ 2018-12-05 14:50  云烟三渺  阅读(176)  评论(0编辑  收藏  举报