一、__ slots __
- __ slots __ 的值继承后没有效果
- 在类中给 __ slots __ 赋值后,当前类的对象不能使用 __ dict __ ;但是这个类的子类对象可以使用 __ dict __ ,只是 __ dict __ 中没有从父类继承下来的对象属性,只有在子类中添加的对象属性
- 如果父类没有给 __ slots __ 赋值,直接给子类的 __ slots __ 无效
二、方法重写
- 完全重写
在子类中重新实现父类的方法 - 部分重写
保留父类的功能在子类中添加新的功能
(在子类方法中通过 'super().' 的方式调用父类方法)
三、添加对象属性
对象属性其实是通过继承init方法继承下来的
格式:
super().__init__()
四、运算符重载
I. +
def __add__(self, other):
# self和other的关系: self+other ==> self.__add__(other)
# 返回值就是运算结果
# a.支持对象+对象:
return self.age + other.age
# b.支持对象+数字
# return self.age + other
II. *
# 将other当成数字
def __mul__(self, other):
return self.name * other
III. >
def __gt__(self, other):
return self.score > other.score
注意:大于和小于运算符是需要重载一个就行
五、内存管理
-
数据的存储:
内存分为栈区间和堆区间;
python中变量本身是存在栈区间的,函数调用过程是在栈区间; 对象都是存在堆区间(python中所有数据都是对象) -
变量赋值过程:
先堆区间开辟空间将数据存起来, 然将数据对应的地址存到栈区间的变量中;
数字和字符串比较特殊,赋值的时候不会直接开辟空间,而是先检测之前有没有存储过这个数据,如果有就用之前的数据的地址 -
内存释放(垃圾回收机制)原理:
python中的每个对象都有一个属性叫'引用计数',表示当前对象的引用的个数。判断一个对象是否销毁就看对象的引用计数是否为0;为0的就销毁,不为0的就不销毁 -
getrefcount函数:
getrefcount(对象) -> 获取对象的引用计数
网友评论