Python面向对象
Python 面向对象
- 一切皆对象:所有的数据类型都是对象
- 对象的主要属性
- identity(ID)
- 对象在堆中的内存地址
- 用id(obj)获取
- type
- 对象的类型
- 用type(obj)获取
- value
- 对象的值
- 用print(obj)获取
- identity(ID)
- 对象的存储结构
- 变量
- Python中变量是指针
- 存于栈中
- 储存堆中对象的地址
- 对象
- 本质是一个内存块
- 存于堆中
- 变量
- 对象类型
- 可变对象
- 列表
- 字典
- 集合
- 不可变对象
- 元组
- 字符串
- 数值
- 可变对象
- 对象方法
- 静态方法 @staticmethod
- 类方法 @classmethod
- 最少也要包含cls参数绑定类本身
- 类实例方法 \普通的方法
- 最少也要包含self参数绑定调用自己的对象
- 常见方法
- super()
- 在子类中调用父类的方法
- 多继承:super(E, self).funxx()
- new(cls)
- 分配空间,创建一个空对象,相当于java中的new
- init(self)
- 对象创建后,对其进行初始化的方法,相当于构造方法
- _call(self)
- 让对象可以加括号()调用,a = A()
- 会先__new__空对象,再传给__init__初始化,最后__call__返回初始化好的对象
- del()
- 析构方法,对象回收
- super()
- 面向对象特性
- 浅拷贝、深拷贝
- copy.copy()、copy.deepcopy()
- deepcopy函数的本质其实就是对象的 一次序列化 和 一次返回序列化
- 私有属性
- 方法或属性前加两个下划线__即可变私有
- 多重继承
- MRO(Method Resolution Order)
- Python中用C3 算法计算MRO,采用广度优先搜索
- class C(A, B) 大致按照 先后顺序 搜索父类方法
- 类的整体层次会十分复杂,尽量避免使用
- MRO(Method Resolution Order)
- 多态
- 一个方法调用由于对象不同其功能也不同
- 多态是方法的多态,属性不能多态
- 实现:继承,方法重写
- 运算符重载
- python的运算符是通过调用 对象的特殊方法 实现的
- a+b 实际上是a.add(b)
- 每个运算符对应相应的方法
- add
- sub
- 在类中重写__add__等特殊方法即可实现重载
- python的运算符是通过调用 对象的特殊方法 实现的
- 浅拷贝、深拷贝
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.







