У меня есть функция, которая принимает коллекцию объектов в качестве аргумента.В случае, если я получаю доступ к члену коллекции, я хочу вызвать функцию очистки этого члена в конце этого вызова этой функции (в основном, отправить его обратно в redis, когда функция завершит мутированиеобъект)
так, например:
class foo():
value = 0
clean = True
def modify(self):
self.value +=1
self.clean = False
def cleanup(self):
if not self.clean:
# do cleanup stuff (i.e. send dirtied data back to database)
print("foo cleanup " + str(self.value))
self.clean = True
def calling_function(collection):
try:
collection[1].modify()
#... do other stuff
finally:
for f in collection:
f.cleanup()
col = [foo(), foo()]
calling_function(col)
Я бы хотел выполнить эту функцию без блока try / finally.Идея состоит в том, что функция, использующая коллекцию, должна быть независимой от необходимости очищать ее, она должна просто иметь возможность доступа к ней и автоматически сохранять данные, когда они выпадают из области видимости (правка: она не выпадает из области видимости, потому чтов вызывающей области все еще есть ссылка)
Единственная идея, которая у меня была, заключалась в том, чтобы каким-то образом внедрить объект в текущую (функциональную) область видимости, который del сделает то, что мне нужно.Но это кажется грязным, и я даже не знаю, возможно ли это.