动静态方法、类的继承及查找顺序
昨日内容回顾
-
对象的概念
python中一切存在均为对象,对象是名称与功能的结合。
-
编程思想两大组成
编程思想按照关注点可以分为面向过程及面向对象。
面向过程编程关注事件进行的流程,一个事件的结束就标志着该段编程的终点。
面向对象编程关注对象的状态,不关注对象经历的事件。
-
类与对象的定义
使用class加类名的方式定义类,类名加括号生成对象。
-
类与对象的基本操作
查看名称空间 使用类名/对象名点双下dict方法查看。
新增或修改名称 类名/对象名点变量名赋值。
生成对象时要求传参 定义类时,使用双下init方法指定形参及赋值规则。
今日内容概要
- 动态方法及静态方法
- 类的继承本质
- 经典类与新式类
- 类中名称的查找顺序
- 方法的派生
今日内容详细
动态方法及静态方法
在定义类中的方法时,默认会将将来调用方法的对象作为第一个参数传给方法。
在python中,默认类中所有的方法均为动态方法,即在对象调用方法时,将方法的复制与对象绑定。
若要使用静态方法,需要在定义方法时使用staticmethod装饰器语法糖。这样在将来调用类中该方法时即可自由传入参数,不过类中的方法与自身无关的话在类中的意义就不大了,因此静态方法使用不多。
一般对象在调用类中方法时,无法直接访问类中方法的本体,若要使调用方法时直接访问其本体,要在定义方法时使用classmethod装饰器语法糖。
类的继承本质
一个类想要使用另一个类的功能时,可以使用类的继承,被继承的类通常称作父类,继承其他类的类通常称作子类。子类除了使用父类的名称及功能之外,还可以有自己独有的名称及方法。
父类与子类的关系类似于类与对象的关系。
类的继承最本质的目的是为了节省代码空间。
经典类与新式类
python中定义的类默认为新式类,即在定义时继承了object或其子类。
经典类即在定义时没有继承任何类的类。python2中默认创建的是经典类。
若要在python3中创建经典类,,,,,,
类中名称的查找顺序
没有类的继承时
在没有类的继承时,对象调用某个名称时,若对象内有该名称则使用该名称对应的数据,若对象自身没有,则调用其所属的类的该名称,若其所属的对象内也没有该名称,则报错。
类的单线继承时
在存在类的单线继承时,调用名称的顺序从调用者的层级开始,逐级向其父类查找。
类的多线不收束继承时
此时,按照继承的顺序从左向右查找,若每条线不止一个节点,则该线查找结束后才会去下条线查找。
类的多线且收束继承时
此时,与不收束继承大致相似,唯一区别是最终的收束节点在最后一条支线查找完成后才能抵达。
方法的派生
方法的派生就是利用类的继承,在原方法的基础上,增加个性化的功能,以完成更加复杂的操作。