5. 类的继承
继承可谓是重中之重,也是面向对象编程的核心内容之一。子类可以继承父类的属性以及方法。作为一名测试人员,学习了类之后,我们可以很好的把代码与数据分离开来,有了基本的封装思想。接下来我们将进一步学习类
5.1 类的继承简单用法
我们首先来看一下最传统的继承,直接继承父类的所有属性和方法,不用做任何改变。观看以下代码
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 # def auto_test(self): 21 # print("会自动化测试") 22 pass 23 24 # logen = SoftwareTestEngineer("Logen","22") 25 # logen.basic_skill() 26 # logen.salary("6000-8000") 27 28 ding = JuniorSoftwareTestEngineer("Ding","25") 29 ding.basic_skill() 30 ding.salary("12000-15000")
我定义了一个SoftwareTestEngineer类,定义了一些属性和方法,然后用JuniorSoftwareTestEngineer继承父类SoftwareTestEngineer,然后什么都不给。然后去实例化子类对象,调用父类的方法属性,发现都是成功的。
这个就是最简单的继承方法,子类不需要做任何事情,就可以调用父类的所有属性方法。
5.2 类继承的重写与拓展
如果仅仅是继承父类,什么都不做,那将毫无意义。这里的重写以及拓展都是针对方法而言。
5.2.1 重写
重写就是针对父类的方法进行重写。有的方法我们继承过来之后,会不符合我们的需求,那我们就需要重写其中的方法。还是以刚刚的代码为例,我们做一下修改。
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 # def auto_test(self): 21 # print("会自动化测试") 22 23 def basic_skill(self): 24 print(self.name+"今年"+str(self.age)+"岁,会写自动化测试脚本。。") 25 26 # logen = SoftwareTestEngineer("Logen","22") 27 # logen.basic_skill() 28 # logen.salary("6000-8000") 29 30 ding = JuniorSoftwareTestEngineer("Ding","25") 31 ding.basic_skill() 32 ding.salary("12000-15000")
这里子类的basic_skill方法就是重写了父类的basic_skill方法,实例化子类之后,调用basic_skill也是调用新写的方法,没有重写的属性方法就依然继承父类。
5.2.2 拓展
重写只是针对父类继承过来的方法进行修改,但是实际上,任何类都会有自己的新特性,这是父类中所没有的新特性。简单来说,我们可以在新的类中定义新的方法。依然对上小节代码做出修改:
1 class SoftwareTestEngineer: 2 def __init__(self,name,age): 3 self.name = name 4 self.age = age 5 6 def basic_skill(self): 7 print(self.name+"今年"+str(self.age)+"岁,会简单的功能测试。。") 8 9 def salary(self, salary): 10 print("薪资大概是%s" % salary) 11 12 class JuniorSoftwareTestEngineer(SoftwareTestEngineer): 13 # def auto_test(self): 14 # print("会自动化测试") 15 16 def basic_skill(self): 17 print(self.name+"今年"+str(self.age)+"岁,会写自动化测试脚本。。") 18 19 def code(self): 20 print(self.name+"也会写代码哦") 21 22 # logen = SoftwareTestEngineer("Logen","22") 23 # logen.basic_skill() 24 # logen.salary("6000-8000") 25 26 ding = JuniorSoftwareTestEngineer("Ding","25") 27 ding.code()
总结就是,子类可以调用父类的属性方法,也可以修改新增新的方法。