python13_类和对象(三)

目录

1. 类的继承简单用法

2. 类继承中的重写与拓展

2.1 重写

2.2 扩展

3. 类的多继承

3.1 类的多继承-类方法不同

3.2 类的多继承-类方法相同

4.类的超继承


学习了类之后,可以很好的把代码与数据分离开来,有了基本的封装思想。接下来我们将进一步学习类的继承,让我们对类的使用更加灵活。

1. 类的继承简单用法

首先学习最传统的继承,直接继承父类的所有方法和属性,不做任何改动。比如有一个父类软件测试工程师:Software Test Engineer,如下所示:

class SoftwareTestEngineer:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def basic_skill(self):
        print(self.name+'今年'+str(self.age)+'岁,可以做点点点功能测试')
    def salary(self,salary):
        print('薪资大概是:{}'.format(salary))

创建父类的实例去进行调用:

SoftwareTestEngineer('多多',18).basic_skill()
SoftwareTestEngineer('多多',18).salary('8000~10000')

现在写一个子类来继承父类的属性和方法,这个类叫中级测试工程师,示范代码如下:

class JuniorSoftwareTestEngineer(SoftwareTestEngineer):
    pass

创建子类的实例去进行调用:

JuniorSoftwareTestEngineer('星星',19).basic_skill()
JuniorSoftwareTestEngineer('星星',19).salary('9000~11000')

这就是最简单的类的继承用法,子类不需要做任何事情,就可以调用父类的所有属性和方法。

2. 类继承中的重写与拓展

可以编写一个类什么事情都不做,直接继承父类的所有属性和函数,且能够直接调用父类的属性和函数,但是这种类肯定是不能满足我们的需求的,所以我们还需要去进一步学习类的其他特性:重写和拓展,但是这里说的重写与拓展都是针对类方法而言,不要搞混淆了。

2.1 重写

重写是对继承过来的父类的方法去进行重写。因为有些方法我们继承过来后,功能可能不符合我们的需求,那我们就可以进行重写,比如中级测试工程师的类,来改写下基础技能,basic_skill函数,示范代码如下:

class JuniorSoftwareTestEngineer(SoftwareTestEngineer):
    def basic_skill(self):
        print(self.name+'今年'+str(self.age)+'岁,可以按照完整的业务逻辑以及测试用例完成功能测试,达到99%的通过率')

创建实例进行调用:

JuniorSoftwareTestEngineer('星星',20).basic_skill()
JuniorSoftwareTestEngineer('星星',20).salary('9000~11000')

通过上述代码,可以得到下面两个总结点:

  • 重写basic_skill后,子类调用的是重写后的basic_skill函数。
  • 没有重写的salary函数

2.2 扩展

重写只是针对父类继承过来的方法进行修改,但是实际上,任何类都会有自己的新特性,这是父类所没有的 新特性也是不满足中级测试工程师的要求 ,所以除了要具备软件测试工程师基本的点点点,那么中级测试工程师还需要具备一些其他父类不具备的功能。示范代码如下:

class JuniorSoftwareTestEngineer(SoftwareTestEngineer):

    def basic_skill(self):
        print(self.name+'今年'+str(self.age)+'岁,可以按照完整的业务逻辑以及测试用例完成功能测试,达到99%的通过率')

    def auto_code(self,code):
        print(self.name+'能够做{}自动化测试'.format(code))

创建子类的实例去进行调用:

JuniorSoftwareTestEngineer('星星',20).auto_code('python')
JuniorSoftwareTestEngineer('星星',20).salary('9000~11000')

通过上述操作,可以得到如下结论:

  • 子类可以直接调用继承父类中的属性值:self.name
  • 子类可以重写父类的方法:basic_skill
  • 子类可以扩展一些父类没有的方法:auto_code

3. 类的多继承

3.1 类的多继承-类方法不同

Python中的类继承有一个特点,就是可以继承多个类,由于多继承在后续学习中不太常用,所以就只简单举例说明一下,编写两个类,类A和类B,类C同时继承类A和类B

class A:
    def add(self,a,b):
        print('类A中的加法:',a+b)
class B:
    def sub(self,a,b):
        print('类B中的减法:',a-b)
class C(A,B):
    pass

创建类C的实例,调用add与sub方法,示范代码如下:

C().add(1,4)
C().sub(5,1)

子类C继承了父类A和B的所有方法,调用的时候,就直接去父类里面取方法进行调用即可。

3.2 类的多继承-类方法相同

在3.1的基础上,重写编写两个类,类A和类B,类C同时继承类A和类B,且类A和类B中有同名的函数,示范代码如下:

class A:
    def add(self,a,b):
        print('类A中的加法:',a+b)
class B:
    def add(self,a,b):
        print('类B中的加法:',a+b)
    def sub(self,a,b):
        print('类B中的减法:',a-b)
class C(B,A):
    pass

创建实例调用:

C().add(1,4)
C().sub(5,1)

注意到子类C调用的全部是父类B中的方法,这就是多继承中的另一个特点:顺序继承。当出现同名方法的时候,会按照顺序优先调用前面父类的同名方法。

如果这时候调换一下子类C的继承顺序:

class C(A,B):
    pass

再次创建实例去进行调用:

C().add(2,8)
C().sub(9,1)

所以用多继承的时候或者是遇到多继承的一些用法的时候,就要注意继承顺序,但是多继承的特点不止这一个,这里只简单介绍了2种情况,有兴趣的可以深入学习拓展一下。

4.类的超继承

类继承还有另外一个特殊用法,就是超继承。超继承其实类方法重写的另一种表现形式,实现的功能比简单的重写更多一些,从直白的语言来进行描述:超继承既要有父类的特性又要有子类的新特性,是个非常贪婪的继承方法。直接用2.2中的JuniorSoftwareTestEngineer类,示范代码如下:

class SeniorSoftwareTestEngineer(JuniorSoftwareTestEngineer):
    def auto_code(self,code):
        super(SeniorSoftwareTestEngineer, self).auto_code(code)
        print('我还可以利用Python代码写接口自动化、web自动化、APP自动化框架!')

 创建实例来进行调用:

SeniorSoftwareTestEngineer('summer',20).auto_code('python')

超继承既可以具有父类方法的特性,又具有子类拓展的新特性,可以说是类方法重写与拓展的完美结合体。但是超继承要注意关键字super的用法:super类写的是子类的类名,顺着子类的类名找到对应的父类,并调用父类的方法,实现超继承。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值