本周内容总结
1.面向对象前戏
人狗大战 >>> 引出了面向对象
2.面向对象的核心前戏
主要是其推导过程
#面向对象的核心思想就是数据和功能的绑定
3.编程思想
1.面向对象编程
可以理解为我们创建一个物品 而这个物品所带来的结果是我们不可操控的
2.面向过程编程
针对不同的问题 给出一步一步的解决思路
'''
两种思路没有优劣之分 根据不同的需求使用
在我们平常的代码中 两者基本是同时使用 占比不同而已
'''
4.面向对象之类与对象
对象:数据和功能的结合体
类:多个对象 相同功能和数据的结合体
'''
类比:
单个的人相当于是对象
类相当于是人的集合>>>人类
'''
# 在代码中一定是现有类才能有对象
5.类与对象的创建
# 类创建的语法结构
class 类名:
'''代码注解'''
对象的功能
对象的数据
1.class: 是定义对象的关键字
2.类名的命名规范与变量名相同 但是开头的首字母要大写
# 类的使用和调用
类在定义阶段就会执行类下面的代码 但是类的名称空间 外界无法直接使用
# 查看类的名称空间
可以使用__dict__的方法 将类中所有的名称空间的名字以键值对的形式展开
6.对象的处理方式
对象独立的数据
小知识:类中的函数 在调用者默认传给第一个参数 所以在使用时我们使用 self 来区分
# 创建类的时候 在类下面定义一个函数 并传入self这样虽然数据是在类中 但是对于调用者来说就已经是自己独有的数据
变量名的修改
类中函数名可以写成__init__ 在使用类定义对象就会自动触发
对象独立的功能
'''定义在类中的功能 默认就是绑定给对象使用的 谁来调谁就是主人公'''
# 在使用这两种方法需要注意的是
1.注意函数中的参数 在定义对象的时候就要传入
2.对象调用的时候会自动将自己作为第一个参数传入
7.动静态的方法
在类中右三种传入的方式
1.定义一个函数 并给出参数 self
def func1(self):
print('我是第一种情况')
# 默认绑定对象 并将对象作为第一个参数传入 类调用多少个参数就传入多少参数
2.使用@classmethod修饰的函数
@classmethod
def func2(cls):
print('我是第二种情况')
# 默认绑定给类 将类作为第一个参数传入 对象也可以调用 也是将对象作为第一个参数传入
3.定义一个普通函数
@staticmethod
def func3(a):
print('我是第三种情况')
# 无论是谁来调 都必须手动传参
8.面向对象之继承的概念
'''
面向对象的三大特征
封装 继承 多态
1.重点放到继承(操作最多)
2.封装和多态有点抽象
'''
# 继承的含义
类继承了父类 类中就具有了父类的功能和数据
# 继承的意义
简化代码
继承其他类的类 我们称之为子类(派生类)
被继承的类 我们称之为父类(基类 超类)
9.继承的本质
'''
对象:数据与功能的结合体
类: 多个对象相同数据和功能的结合体
父类:多个类相同数据和功能的结合体
ps:类与父类目的都是为了节省代码
'''
继承的本质分为两部分:
抽象:将多个相同的东西抽出去作为一个新的类
继承:将多个类继承刚刚抽出的类
10.查找名字的查找顺序
# 不继承其他名字的查找顺序
先查找自己的的名称空间再到自己所在类的名称空间中
对象 >>> 类
# 单继承的名字查找顺序:
也是先查找自己的名称空间再去找自己所在类的名称空间再去类所继承的父类中查找
对象 >>> 类 >>> 父类
# 多继承的名字查找顺序
1.菱形继承(广度优先)
2.非菱形继承(深度优先)
'''
查找的顺序:
对象 >>> 对象所在的类 >>> 父类(从左到右)
'''
# 使用对象点mro()可以查看名字查找的顺序哦
由于所有的类都是默认绑定object 所有在最后都会去查找object
ps:在python3中是默认加的 单在python2中需要我们手动加入
11.经典类和新式类
"""
经典类:不继承object或者其子类的类
新式类:继承object或者其子类的类
在python2中有经典类和新式类
在python3中只有新式类(所有类默认都继承object)
"""
class Student(object):pass
ps:在python3中是默认加入 但在python2中则是经典类
12.派生方法
'''
在继承的基础上 往类中再加入特别的功能 我们称之为派生
这样的类 不仅具有父类的数据和功能 也同时拥有自己的属性
'''
实战应用:
list 在python也是一个类 可以点出许多方法 比如 append
假设我们想要尾部追加 但不能追加一些指定的数据
代码实现:
class Mylist(list):
def append(self,values):
if values == 'aaa':
print('aaa无法进行尾部追加')
return
super().append(values)
obj = Mylist()
obj.append(111)
obj.append(222)
obj.append('aaa')