面向对象周总结
人狗大战
面向对象核心思路
封装一个人的函数
封装一个狗的函数
让人才能调用人的函数内的数据和方法
让狗才能调用狗的函数内的数据和方法
就是想引出面向对象的核心思想:
数据与功能的绑定
编程思想
面向过程编程:按照固定的流程解决问题
eg:到ATM之前,我们都是面向过程编程 注册功能 登录功能
面向对象编程:对象即容器 数据与功能的结合体 就像游戏角色,我们只创建对象,对象结果怎么样看别人怎么用
面向对象类与对象
对象:数据与功能的结合体 对象才是核心
类:多个对象相同数据和功能的结合体 类主要是为了节省代码
程序中想要产生对象 必须先定义出类
类与对象的创建
1.类的语法结构
calss 类名:
'''代码注释'''
对象公共的数据
对象公共的功能
1.class是定义类的关键字
2.类名的命名与变量名几乎一致 需要注意首字母推荐大写用于区分
3.数据:变量名与数据值的绑定 功能(方法)其实就是函数
2.类的定义与调用
类在定义阶段就是执行类体代码 s1 = 类名()产生对象
对象独有的数据
# 对象公共的数据
school_name = '清华大学'
# 专门给学生添加独有数据的功能 变成__init__之后类产生对象的过程中自动触发
对象独有的功能
# 对象公共的功能
def choice_course(self):
print(f'学生{self.name}正在选课')
# 1.直接在全局定义功能 该函数就不是学生对象独有的了
# 2.只能将函数放在类中 但是类中的函数又是对象公共的
'''定义在类中的功能 默认就是绑定给对象使用的 谁来调谁就是主人公'''
动静态方法
1.类中直接定义函数 默认绑定给对象 类调用几个参数传几个 对象调用第一个参数就是对象自身
2.@classmethod修饰的函数 默认绑定给类 类调用第一个参数就是类自身 对象也可以调用并且会自动产生该对象的类当做第一个参数传入
3.普通的函数 无论类还是对象调用 都必须自己手动传参
面向对象继承的概念
1.继承就是指子类可以使用父类里的所有数据和方法
3.继承的实操
class Son(Father):
pass
1.在定义类的时候类名后面可以加括号填写其他类名 意味着继承其他类
2.在python支持多继承 括号内填写多个类名彼此逗号隔开即可
class Son(F1, F2, F3):
pass
继承的本质
对象:数据和功能的结合体
类(子类):多个对象相同数据和功能的结合体
父类:类与父类的本质都是为了节省代码
继承的本质应该分为两部分
抽象:将多个类相同的东西抽出去形成新的类
继承:将多个类继承刚刚抽取出来的新的类
名字的查找顺序
1.单继承:先在对象名称空间内找,再去类里找
2.多继承:从左往右,如果遇到菱形就先广度优先,再找最后的那个;度过不是菱形,深度优先,一直找到底
经典类与新式类
经典类:不继承object或者其子类的类
新式类:继承object或者其子类的类
在python2中有 经典类和新式类
在python3中只有新式类(所有类默认都继承object)
派生方法
# 子类基于父类某个方法做了扩展