控制对象销毁顺序的最佳实践一通过函数控制
控制对象销毁顺序的最佳实践一
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__': print(test()) print('finished')

test()函数调用返回之前会del control, control对象的引用标识只有唯一的control,所以此时调用control对象的__del__()方法,所以看到了Releasing <__main__.Control object at 0x000002834B413D90>打印, 再进而真正去销毁control对象, control对象的属性标识self.a引用了A()对象, self.b引用了B()对象, self.c引用了C()对象, self.d引用了D()对象, self.e引用了E()对象, self.f引用了F()对象
学习开心就好

浙公网安备 33010602011771号