# 面向对象进阶
对象属性的增删改查
查 - 获取属性值
""" 1) 对象.属性 - 获取对象指定属性值,如果属性不存在或报错 2) getattr(对象, 属性名) - 获取对象指定属性值,如果属性不存在或报错 3) getattr(对象, 属性名, 默认值) - 获取对象指定属性值 默认值不报错 """
增、改
""" 1) 对象.属性 = 值 - 当属性存在的时候修改属性的值,当属性不存在的时候添加属性 2) setattr(对象, 属性名, 值) - 当属性存在的时候修改属性的值,当属性不存在的时候添加属性 """
删
""" 1) del 对象.属性 - 删除指定对象的指定属性 2) delattr(对象, 属性名) - 删除指定对象的指定属性 """
内置属性
""" __doc__ 获取类的说明文档 __module__ 获取类所在模块 __class__ 获取对象的类型,功能和type() __dict__ 获取类所有的类属性和对应的值,以字典的形式返回(类属性) __dict__ 获取对象所有的对象属性和对应的值,以字典的形式返回(对象属性) __name__ 获取类的名字 """
继承
# 1.继承 """ 继承就是让子类直接拥有父类的属性和方法。 子类 - 继承者 父类 - 被继承者,又叫超类 """ # 2.继承的语法 """ class 类名(父类1, 父类2,..) 说明文档 类的内容 注意:如果没有定义类的时候没有写继承关系,那么这个类默认继承基类object class 类名: == class 类名(object) """ # 调用当前类的父类的__init__方法 super().__init__() """ super(类, 对象).方法 - 调用指定类的父类的指定方法 注意;()对象必须是前面()类的对象 """
拷贝
""" 1)直接赋值 直接将变量中的地址赋值给另一个变量,赋值后两个变量指向同一块内存区域,并相互影响 2) 浅拷贝 列表切片、列表.copy()、字典.copy()等都是浅拷贝 复制原数据产生一个新的数据,将新的数据的地址返回,如果原数据中有子对象(有可变数据),不会复制子对象 3)深拷贝 deepcopy 复制原数据产生一个新的数据,将新的数据的地址返回,如果原数据中有子对象(有可变数据),子对象也会复制 """
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n0fLks3K-1628077318016)(file:///E:\QQ\1194953724\Image\Group2\R_\SG\R_SGK@8X}DY@}3A@}40TG3A.png)]
子对象不可变
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YpxDzxxU-1628077318020)(file:///E:\QQ\1194953724\Image\Group2\7N}%\7N}%YC7NQC9E7IIH2PFF0~E.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Hk16gyEU-1628077318023)(file:///E:\QQ\1194953724\Image\Group2\M[`@\M[@J{TFEBAND7
TFFJW}_W.png)]
# 2.内存管理
"""
1)内存的申请
定义变量保存数据的时候系统会自动申请,如果定义变量保存的是可变数据,每次都会申请新的内存,如果是不可变的数据,会先检查
是否已经保存过,如果已经储存就不会在重新申请内存
2)释放
如果一个数据的引用计数(引用的个数)为1,那么这个数据就会被自动释放
引用:保存数据地址的对象就是这个数据的引用
"""