一、多继承
python中的类支持多继承(让一个类同时继承多个类)。
多继承的时候,子类只能继承第一个父类所有的属性和方法,后面的父类中。
字段、方法都能继承,对象属性只能继承前面那一个父类的对象属性。
二、运算符重载
1.运算符
python中所有的类型都是类,所以所有的数据都是对象。
python中使用任意的运算符都是在调用相应的类中的相应方法,每一个运算符对应什么方法是固定的。
某种数据是否支持某个运算符操作,就看这个数据类型中是否实现了对应的方法。
2.运算符重载
运算符重载指的是在不同的类中实现同样的运算符对应的函数。
类的对象默认情况下只支持:==,!=
# a+b -> a.__add__(b)
# self -> 当前类的对象,也是+前面的那个数据
# other -> +后面的那个数据。类型根据运算规则的设计可以是任何类型的数据
def __add__(self, other):
return '123'
三、浅拷贝和深拷贝
1.直接赋值:
将变量中的地址直接赋值给新的变量;赋值后两个变量的地址相同。
2.拷贝:
不管是浅拷贝还是深拷贝都会对原数据进行赋值产生新的地址。
3.浅拷贝:
字符串、列表和元组的切片;对象.copy();copy模块中的copy方法都是浅拷贝。
浅拷贝只拷贝当前对象,不会对子对象进行拷贝。即子对象的地址元对象的地址指向同一个地址。
4.深拷贝:
copy模块中的deepcopy方法是深拷贝。子对象(不管有几层)的地址全部产生新的地址。
四、枚举
1.枚举的特点:
1.可以通过有意义的属性名直接显示数据。
2.每个数据的值不能修改。
3.可以做到不同数据的值唯一。
@unique # 做到不同数据的值唯一
class PokerNum(Enum): # 继承Enum,让每个数据的值不能修改,做到1,2
pass
五、内存管理:
1.内存的开辟:
内存区间分为栈区间和堆区间;栈区间的内存自动开辟自动释放,堆区间的内存需要手动开辟手动释放。
但是python已经将堆区间内存的开辟和释放自动化。
当给变量赋值的时候,系统会先在堆区间中开辟空间将数据存起来,然后再将数据在堆中的地址存到变量中,变量存在栈区间;
数字和字符串数据在开辟空间的时候,会先检查内存中之前是否已经有过这个数据。
如果有就直接使用之前的数据,没有才开辟新的空间保存数据。
2.内存的释放:
栈区间:全局栈区间在程序结束后销毁,函数栈区间在函数调用结束后销毁。
堆区间:一个对象是否销毁,就看这个对象的引用计数是否为0;如果一个对象的引用为0,这个对象就会销毁(垃圾回收机制)。
注意:python中针对对象的循环引用已经做了处理。不需要写额外的代码来解决循环引用问题。