面向过程编程
1 | 核心过程二字,过程指的是解决问题的步骤,即先干什么、再干什么、然后干什么... |
1 | 优点 |
面向对象编程
类
属性查找
1 | def __init__(self, x, y, z): #会在调用类时自动触发 |
绑定方法
在类内部定义的函数(没有被任何装饰器修饰的),默认就是绑定给对象用的:精髓在于会自动将对象传入,当成第一个参数 self
1 | class OldboyStudent: |
- 在类内部定义的函数如果被装饰器@classmethod装饰,
那么则是绑定给类的,应该由类来调用,类来调用就自动将类当作第一个参数自动传入 - 非绑定:[br/>类中定义的函数如果被装饰器@staticmethod装饰,那么该函数就变成非绑定方法
既不与类绑定,又不与对象绑定,意味着类与对象都可以来调用
但是无论谁来调用,都没有任何自动传值的效果,就是一个普通函数]
类即类型
1 | #在python3中统一了类与类型的概念,类就是类型 |
新式类
但凡继承了object的类以及该类的子类,都是新式类
经典类
没有继承object的类以及该类的子类,都是经典类
1 | 在python3中都是新式类,只有在python2中才区别新式类与经典类 |
继承与派生
查看继承关系
1 | #派生:子类中新定义的属性,子类在使用时始终以自己的为准 |
组合
比如老师需要给学生打分需要把学生对象添加到老师方法里面,该方法修改学生的分数属性
比如课程对象添加到老师对象和学生对象的属性里面,老师对象和学生对象就有了改课程对象的方法
在子派生的新方法中重用父类功能的两种方式
1 | Vehicle.__init__(self,name,speed,load,power) |
1 | #super(Subway,self) 就相当于实例本身 在python3中super()等同于super(Subway,self) |
菱形继承
1 | print(A.mro()) |
找到A类里的继承顺序
[
保留最后的G最后一次继承
1 | class G(object): |
1 | # 在子派生的新方法中重用父类功能的两种方式 |
多态
1 | 1、类的属性和对象的属性有什么区别?''' |
封装
强制调用
1 | print(People._People__country) |
特性property
1 | #property装饰器用于将被装饰的方法伪装成一个数据属性,在使用时可以不用加括号而直接引用 |
查看隐藏封装属性
1 | # |
绑定方法和非绑定方法
1 | import settings |
判断类
1 | class Foo: |
反射
1、什么是反射
通过字符串来操作类或者对象的属性
2、如何用
hasattr 有
getattr 拿
setattr 改
delattr 删
1 | class People: |
类中的魔法方法
1、str方法
1 | class People: |
1、del析构方法
1 | __del__会在对象被删除之前自动触发 |