Один из способов - просто установить все переменные экземпляра на None
. Затем, делая почти все, вызовет AttributeError или TypeError. Более сложный подход - обернуть методы экземпляра декоратором. Декоратор может проверить, было ли закрыто закрыто. Если это так, выдается исключение:
class Unusable:
def __init__(self):
self.alive = True
def notcleanedup(func):
def operation(self, *args, **kwargs):
if self.alive:
func(self, *args, **kwargs)
else:
raise Exception("Use after cleanup")
return operation
@notcleanedup
def sensitive(self, a, b):
print a, b
def cleanup(self):
self.alive = False