Day16——继承/内存管理

一、__ slots __

  1. __ slots __ 的值继承后没有效果
  2. 在类中给 __ slots __ 赋值后,当前类的对象不能使用 __ dict __ ;但是这个类的子类对象可以使用 __ dict __ ,只是 __ dict __ 中没有从父类继承下来的对象属性,只有在子类中添加的对象属性
  3. 如果父类没有给 __ slots __ 赋值,直接给子类的 __ slots __ 无效

二、方法重写

  1. 完全重写
    在子类中重新实现父类的方法
  2. 部分重写
    保留父类的功能在子类中添加新的功能
    (在子类方法中通过 '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

注意:大于和小于运算符是需要重载一个就行


五、内存管理

  1. 数据的存储:
    内存分为栈区间和堆区间;
    python中变量本身是存在栈区间的,函数调用过程是在栈区间; 对象都是存在堆区间(python中所有数据都是对象)
  2. 变量赋值过程:
    先堆区间开辟空间将数据存起来, 然将数据对应的地址存到栈区间的变量中;
    数字和字符串比较特殊,赋值的时候不会直接开辟空间,而是先检测之前有没有存储过这个数据,如果有就用之前的数据的地址
  3. 内存释放(垃圾回收机制)原理:
    python中的每个对象都有一个属性叫'引用计数',表示当前对象的引用的个数。判断一个对象是否销毁就看对象的引用计数是否为0;为0的就销毁,不为0的就不销毁
  4. getrefcount函数:
    getrefcount(对象) -> 获取对象的引用计数
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1.类属性和方法的访问权限 私有的:在类的外部不可以使用,也不可以继承 保护的:在类的外部不可以使用,可以继承 公...
    馒头不要面阅读 1,841评论 0 0
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,915评论 1 32
  • 私有化 .属性和方法访问权限私有的:在类的外部不可以被使用,,也不可以被继承保护的:在类的外部不可以被使用,也可以...
    ChiAo1fei阅读 1,868评论 0 0
  • """author = drh""""""类和对象 1.类的声明class 类名:类的内容 2.属性 - 声明在类...
    LittleBear_6c91阅读 3,085评论 0 0
  • 从图书馆出来打开滴滴,雨好像没有想象中大,不如步行去地铁站吧。 嘿,一起打伞吧。 背后一个高个子女生轻拍了一下我肩...
    Livia171阅读 1,778评论 0 0

友情链接更多精彩内容