__new__、__init__、__del__

class Base:

    def __new__(cls, *args, **kwargs):
        print('base __new__')
        return object.__new__(cls, *args, **kwargs)

    def __init__(self):
        print('base __init__')

    def __del__(self):
        print('base __del__')


class Demo(Base):
    FLAG = 1
    count = 0

    def __new__(cls, *args, **kwargs):
        Demo.count += 1
        print('demo -> __new__')
        return super().__new__(cls, *args, **kwargs)

    def __init__(self):
        print('demo -> __init__')

    def __del__(self):
        """
        注意:当有变量保存了一个对象的引用时,此对象的引用计数就会加1;
            当使用del() 删除变量指向的对象时,则会减少对象的引用计数。
            如果对象的引用计数不为1,那么会让这个对象的引用计数减1,
            当对象的引用计数为0的时候,则对象才会被真正删除(内存被回收)
        :return:
        """
        Demo.count -= 1
        print('demo -> __del__')


d = Demo()
dd = d
del dd

print(Demo.count)

print('over')
demo -> __new__
base __new__
demo -> __init__
1
over
demo -> __del__
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容