Day16总结-2019/08/12

一、多继承

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中针对对象的循环引用已经做了处理。不需要写额外的代码来解决循环引用问题。

你可能感兴趣的:(Day16总结-2019/08/12)