Tôi không thể gọi destructor của lớp Parent từ destructor của lớp Child. Xin vui lòng, kiểm tra mã dưới đây:Python: không thể gọi destructor lớp cha với siêu()
class BaseClass(object):
def __del__(self):
print 'BaseClass->Destructor'
class DerivativeClass(BaseClass):
def __del__(self):
print 'DerivativeClass->Destructor'
#Invoke destructor of the base class, it works
BaseClass.__del__(self)
#Doesn't work
#super(DerivativeClass, self).__del__()
instance = DerivativeClass()
Khi tôi sử dụng super(DerivativeClass, self).__del__()
trong DerivativeClass.__del__()
Tôi đã nhận lỗi sau:
Exception TypeError: 'must be type, not None' in <bound method
DerivativeClass.__del__ of <__main__.DerivativeClass object at 0xb73a682c>> ignored
HỎI:
Tại sao tôi không thể sử dụng super
trong destructor của lớp con trong khi nó hoàn toàn tốt trong constructor của lớp con?
Tôi không chắc chắn lý do chính xác, nhưng lưu ý rằng 'siêu (DerivativeClass, self)' trả về một đối tượng kiểu 'super', không phải là một thể hiện của' BaseClass'. '__del__' có thể làm cho một số giả định về đối số đầu tiên của nó không hợp lệ cho các đối tượng' super'. – chepner
Đặt một 'in (DerivativeClass)' ở phía trước của 'siêu ...' và bạn sẽ thấy những gì đang xảy ra. – Hyperboreus
Hoặc thêm một 'del instance' làm dòng cuối cùng vào mã của bạn để đảm bảo rằng thể hiện được bỏ đi trước khi lớp đó vượt qua Jordan. – Hyperboreus