首页 > 编程语言 >Python基础之面向对象:3、继承与派生

Python基础之面向对象:3、继承与派生

时间:2022-11-03 17:23:37浏览次数:35  
标签:__ name 派生 Python 子类 继承 面向对象 父类 self

面向对象

一、三大特征之继承

  • python三大特征:

    • 封装、继承、多态
  • 三者中继承最为核心,实际应用对,感受较为直观

  • 封装和多态略微抽象

image

1、继承的概念

继承的含义:

​ 在现实生活中,继承表示人与人之间资源的从属关系

​ 例如:儿子继承父亲

​ 在编程的世界中,继承表示类与类之间的资源从属关系

​ 例如:类a继承类b

继承的目的:

​ 在现实生活中,儿子继承了附件就拥有了父亲所有资源的支配权限

​ 在编程世界中,类A继承了类B就拥有了类B中所有的数据和方法使用权限

2、继承的本质

​ 继承本质应该分为两部分:

​ 当多个类中含有相同部分时,我们就把相同的部分抽离出去,将相同的部分新成一个新的类,在用刚才被抽离出去相同部分的类,去继承新的那部分,这样的好处就是,当多个类需要一个相同用的功能时,可以节省代码,不用反复编写

​ 抽象:将多个类相同的东西抽出去,形成一个新的类

​ 继承:将多个类继承刚刚抽取出来的新的类

对象>>>:数据与功能的结合体

类(子类)>>>:多个对象相同功能和数据的结合体

父类>>>:多个子类相同功能和数据的结合体


本质:类、父类的本质都是为了节省代码,减少重复编写相同代码的时间,使用时更为方便

image

3、继承的实操

  • 在定义类的时候,类名后方可加括号,早括号内填入其他它类的名字,就意味着继承了其它类

  • 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

4、继承后名字查找的顺序

未继承:

​ 对象(object)自身名称空间>>>类的名称空间

单线继承:

​ 对象(object)自身名称空间>>>子类的名称空间>>>父类的名称空间

多线继承:

​ 1、菱形继承: (广度优先,最后才会找闭环的定点)

​ 对象自身名称空间>>>子类名称空间>>>父类名称空间(形参内由左至右)>>>闭环

​ 2、非菱形继承: (深度优先)

​ 对象自身名称空间>>>子类名称空间>>>父类名称空间(形参内由左至右)

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

image

5、经典类与新式类

经典类:

​ 不继承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://www.cnblogs.com/kangssssh/p/16855176.html

相关文章

  • 计算机二级python备考刷题知识点总结(二)
    1、center()语法:str.center(width,fillchar)注:fillchar必须要用引号引起了center()返回一个原字符串居中,并使用填充字符填充到长度为width的新字符串,默认填充字符为空格......
  • Python中使用pyserial实现串口通信
    简介pyserial是基于Python实现的,用于操作串口的第三方库,它支持Windows、Linux、OSX、BSD等多个平台。本文主要讲解在Windows环境下使用pyserial来实现串口通信的基本方......
  • 面向对象之继承
    动静态方法面向对象之继承理论继承基本操作对象查找名字的顺序(非常重要)继承本质基于继承的派生方法(重要)动静态方法1.绑定给对象的方法#类中定义的函数有多种......
  • 面向对象:继承、动静态方法
    目录一、动静态方法1类中直接定义函数2被@classmethod修饰的函数3静态函数被@staticmethod修饰的函数二、面向对象-继承1面向对象三大特性2继承的概念1.继承的......
  • 面向对象2、动静态方法、继承、名字查找顺序、经典类、新式类、派生方法
    目录今日内容概要今日内容详细动静态方法面向对象之继承的概念继承的本质名字的查找顺序经典类与新式类派生方法作业今日内容概要动静态方法面向对象之继承理论继承基......
  • 面向对象2
    今日内容详细面对对象动静态方法在类中定义的函数有多种特性classStudent: school_name='摆烂大学'1.类中直接定义函数默认绑定给对象类调用有几个参数传几个......
  • python中iterable和iterator
    iterable:可迭代对象可以一个一个的返回它的成员,比如list,str,tuple,dict,fileobjects它可以在forloop种使用,forloopin后面接的必须是一个可迭代对象iterator:迭代......
  • python 中print函数实现输出不换行
     001、[root@pc1test3]#python2##python2Python2.7.5(default,Jun282022,15:30:04)[GCC4.8.520150623(RedHat4.8.5-44)]onlinux2Type"help......
  • 面向对象2
    目录动静方法面向对象之继承的概念继承的本质名字的查找顺序经典类与新式类派生方法动静方法在类中定义的函数有多种特性classStudent:school_name='摆烂大学'......
  • 面向对象编程(二)
    面向对象编程(二)一、动静态方法什么是动静态?动态就是绑定给对象的方法直接在类体代码中编写即可,对象调用会自动将对象当做第一个参数传入,类调用有几个形参就传几个实参;......