美文网首页
__new__、__init__、__del__

__new__、__init__、__del__

作者: noteby | 来源:发表于2019-02-21 11:00 被阅读0次
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__

相关文章

网友评论

      本文标题:__new__、__init__、__del__

      本文链接:https://www.haomeiwen.com/subject/tsfryqtx.html