控制对象销毁顺序的最佳实践一通过函数控制

发布时间 2023-09-08 00:04:01作者: fangpinz

控制对象销毁顺序的最佳实践一

  1. 通过函数控制.

  2. 在 if __name__ == '__main__': pass 代码块,实例化对象,然后由解释器优化的对象销毁逻辑控制,如果不清楚解释器的对象销毁逻辑,那么销毁对象的顺序是不可控的(程序员不可控)

1.通过函数控制.

class A(object):
    def __init__(self):
        print(f"Initializing {self}")
        
    def __del__(self):
        print(f"Releasing {self}")
        
        
class B(object):
    def __init__(self):
        print(f"Initializing {self}")
    
    def __del__(self):
        print(f"Releasing {self}")


class C(object):
    def __init__(self):
        print(f"Initializing {self}")
    
    def __del__(self):
        print(f"Releasing {self}")


class D(object):
    def __init__(self, a, b):
        print(f"Initializing {self}")
        self.a = a
        self.b = b
    
    def __del__(self):
        # del self.a
        # del self.b
        print(f"Releasing {self}")


class E(object):
    def __init__(self, a):
        print(f"Initializing {self}")
        self.a = a
    
    def __del__(self):
        # del self.a
        print(f"Releasing {self}")


class F(object):
    def __init__(self, a, b):
        print(f"Initializing {self}")
        self.a = a
        self.b = b
    
    def __del__(self):
        # del self.a
        # del self.b
        print(f"Releasing {self}")
        

class Control(object):
    def __init__(self):
        print(f'Initializing {self}')
        self.a = A()
        self.b = B()
        self.c = C()
        self.f = F(self.a, self.b)
        self.d = D(self.a, self.b)
        self.e = E(self.a)

    def start_test(self):
        print(f'{self} is testing')
    
    def __del__(self):

        print(f"Releasing {self}")
    
        
def test():
    control = Control()
    control.start_test()

    
if __name__ == '__main__':

    test()
    print('finished')