делает объект python нестабильным после вызова типа finalize - PullRequest
1 голос
/ 30 июня 2010

У меня есть объект python, который оборачивает чувствительный и важный ресурс в системе. У меня есть cleanup() функция, которая безопасно снимает различные блокировки, используемые объектом.

Я хочу убедиться, что после вызова cleanup() объект станет непригодным для использования. В идеале любой вызов любой функции-члена объекта вызовет исключение. Есть ли способ сделать это, который не включает проверку флага в каждой функции?

1 Ответ

1 голос
/ 30 июня 2010

Один из способов - просто установить все переменные экземпляра на 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
...