首页 > 编程语言 >软件测试|Python基础之面向对象(四)

软件测试|Python基础之面向对象(四)

时间:2023-02-03 18:32:03浏览次数:52  
标签:__ name Python 子类 继承 面向对象 父类 self 软件测试

Python面向对象之继承与派生

继承

  • python三大特征
  • 封装、继承、多态
  • 三者中继承最为核心,实际应用多,感受较为直观
  • 封装和多态略微抽象

软件测试|Python基础之面向对象(四)_名称空间

  1. 继承的概念
    继承的含义:
    在现实生活中,继承表示人与人之间资源的从属关系
    例如:儿子继承父亲
    在编程的世界中,继承表示类与类之间的资源从属关系
    例如:类a继承类b
    继承的目的:
    在现实生活中,儿子继承了附件就拥有了父亲所有资源的支配权限
    在编程世界中,类A继承了类B就拥有了类B中所有的数据和方法使用权限
  2. 继承的本质
    继承本质应该分为两部分:
    当多个类中含有相同部分时,我们就把相同的部分抽离出去,将相同的部分新成一个新的类,在用刚才被抽离出去相同部分的类,去继承新的那部分,这样的好处就是,当多个类需要一个相同用的功能时,可以节省代码,不用反复编写
    抽象:将多个类相同的东西抽出去,形成一个新的类
    继承:将多个类继承刚刚抽取出来的新的类

对象>>>:数据与功能的结合体
类(子类)>>>:多个对象相同功能和数据的结合体
父类>>>:多个子类相同功能和数据的结合体
本质:类、父类的本质都是为了节省代码,减少重复编写相同代码的时间,使用时更为方便

软件测试|Python基础之面向对象(四)_父类_02

  1. 继承的实操
  • 在定义类的时候,类名后方可加括号,早括号内填入其他它类的名字,就意味着继承了其它类
  • python支持多类继承,括号内可填写多个类名,只需用逗号隔开即可
# 1、定义两个类,其中一个假设为父类,另一个假设为子类
class Father:
money = 99999999
house = '老北京四合院' # 父类中数据强大

class Son:
pass # 子类中空空如也


# 2、父类中的数据,子类无权直接使用,当我们在子类中继承父类后,子类和子类产生的对象都可以通过'点'的方式使用父类中的数据
class Father:
money = 99999999
house = '老北京四合院'


class Son(Father):
pass

# 子类直接使用父类中的数据
print(Son.money)
# 子类产生的对象使用父类中的数据
obj1 = Son()
print(obj1.money)
------------------------------------------------------------------------------------
99999999
99999999
  1. 继承后名字查找的顺序

未继承:
对象(object)自身名称空间>>>类的名称空间

单线继承:
对象(object)自身名称空间>>>子类的名称空间>>>父类的名称空间

多线继承:
1、菱形继承: (广度优先,最后才会找闭环的定点)
对象自身名称空间>>>子类名称空间>>>父类名称空间(形参内由左至右)>>>闭环
2、非菱形继承: (深度优先)
对象自身名称空间>>>子类名称空间>>>父类名称空间(形参内由左至右)

在一个子类绑定多个父类时,名字的查找顺序可能比较难理解,针对这个问题,可以使用python中内置方法:mor()   
通过对象名点mor() 的方式,可以帮助我们查看名字的查找顺序

软件测试|Python基础之面向对象(四)_子类_03

  1. 经典类与新式类

经典类:
不继承object的类或者其子类的类
新式类:
继承object或者其之类的类

  • 在python3中,只有新式类,所有类都默认继承object
  • 在python2中,区分经典类和新式类
  • 在以后我们定义类的时候,如果没有明确的父类,可以在类的括号内填入object,这样话能够提高我们代码的兼容性

派生

  1. 派生的概念
    派生是指,子类继承父类,派生出自己的属性与方法,并且重用父类的属性与方法
  2. 派生的方法
    1、直接引用父类的__ init __为其传参,并添加子类属性
    缺点:代码重复率太高,浪费资源、时间
class People:
school = '清华大学'
def __init__(self, name, sex, age):
self.name = name
self.sex = sex
self.age = age

class Teacher(People):
def __init__(self, name, sex, age, title): #派生
self.name = name
self.sex = sex
self.age = age
self.title = title
def teach(self):
print(f'{self.name}是老师')

obj = Teacher('lili','female', 28, '高级教师')
#只会找自己类中的__init__
print(obj.name, obj.sex, obj.age, obj.title)
#lili female 28 高级教师

2、通过super()来指向父类的属性
super()是一个特殊的类,在子类__ init __内调用super得到一个对象,该对象指向父类的名称空间

class Teacher(People):
def __init__(self, name, sex, age, title):
super().__init__(name, age, sex)
#调用的是绑定方法,自动传入self
self.title = title
def teach(self):
print(f'{self.name}是老师')


obj = Teacher('lili','female', 28, '高级教师')

注意:在python2中super 的使用需要完整地写成super(自己的类名,self),而在python3中可以简写为super()



标签:__,name,Python,子类,继承,面向对象,父类,self,软件测试
From: https://blog.51cto.com/u_15640304/6036016

相关文章

  • 软件测试|Python基础之模块导入和使用
    Python模块导入和使用模块1、简介本质:模块是指内部具有一定功能(代码)的py文件2、模块的表现形式1、py文件(py文件也可以称之为是模块文件)2、含有多个py文件的文件夹(按照模块功......
  • pycharm设置python头文件模版
    钢铁知识库,一个学习python爬虫、数据分析的知识库。人生苦短,快用python。使用pycharm创建python文件时候,有时候需要自动生成想要的文件头,如何生成呢?只需要以下几步:在f......
  • python之路61 drf从入门到成神 4 反序列化类校验部分源码解析、断言、drf请求、响应格
    反序列化类校验部分源码解析#反序列化校验、什么时候开始执行校验视图类中的ser.is_valid(),就会执行校验,校验通过返回True,不通过返回False#入口:ser.is_valid......
  • python-json的自定义编码器与自定义解码器
    json的数据类型有限,在实际业务中可能会遇到数据无法使用JSON编码的问题。如果我们需要转发的数据有大量或位置不规则的json无法解析数据类型时,事先处理就变成了一件比较麻......
  • 【Azure Cache for Redis】Python Djange-Redis连接Azure Redis服务遇上(104, 'Connec
    问题描述使用Python连接AzureRedis服务,因为在代码中使用的是Djange-redis组件,所以通过如下的配置连接到AzureRedis服务:CACHES={"default":{"BACKEND":"dj......
  • Python 异步: 什么是事件循环 ?(6)
    asyncio程序的核心是事件循环。在本节中,我们将花点时间看一下asyncio事件循环。1.什么是Asyncio事件循环事件循环是用于在单个线程中执行协程的环境。事件循环是异......
  • Python---- 一闭三器
    一闭三器闭包装饰器迭代器生成器闭包保证数据安全闭包结构内层函数对外层函数的局部变量的使用,内层函数被称为闭包函数闭指的是:该函数的内部函数包......
  • Java基础之面向对象——抽象类、接口、枚举
    抽象类     越是处于顶层定义的类,实际上可以进一步地进行抽象。抽象类里可以有抽象方法(也可以没有)。抽象类完全由子类来实现,父类中不需要提供实现。例如,对于该父类......
  • 基于python的小翻译工具
    这里的翻译接口是基于百度翻译的API这里的方案是利用百度翻译开放平台实现的会稍微麻烦点,但是更加方便个性化翻译也可以通过爬虫的形式,直接操作百度翻译网页来实现前......
  • 40面向对象-属性
    packagechapter04;publicclassJava05_Object_Field{publicstaticvoidmain(String[]args){//TODO面向对象-属性//所谓的属性,其实就是类......