__new__、__init__、__del__

2019-02-21  本文已影响0人  noteby
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__
上一篇 下一篇

猜你喜欢

热点阅读