我想这样做:
def foo():
if <a magical condition>:
return x
else:
poof()
# or...
def foo():
x = <a magical object>
return x
def poof():
print 'poof!'
bar = foo() # bar points to <a magical object> but poof() is not called
foo() # prints 'poof!'
我想这可以归结为调用返回对象的__del__
方法时的情况。但也许有更好的方法。就像函数本身知道它的返回值被分配一样。我想我担心依赖垃圾收集的时间。我也不喜欢那个全球at_end_of_program
旗帜。
我的解决方案:
class Magic:
def __del__(s):
poof()
def foo():
x = Magic()
return x
def poof():
if not at_end_of_program:
print 'poof!'
bar = foo() # No poof.
foo() # prints 'poof!'
答案 0 :(得分:3)
我对你的问题感到很困惑,但我认为你要做的是在重新分配值时运行一个函数。
我没有使用__del__()
方法函数做一些棘手的事情,我建议你把你的值放到一个类实例中,然后重载__setattr__()
。您还可以重载__delattr__()
以确保抓取del(object.x)
的值x
。
__setattr__()
的目的是为你提供一个钩子来捕捉什么东西分配给你的班级成员。而且你不需要任何奇怪的end_of_program标志。在程序结束时,只需删除__delattr__()
的重载函数,这样就不会调用它来进行程序结束清理。
答案 1 :(得分:1)
函数无法判断其返回值的用途。如果您重新分配到bar
,您的解决方案将会打印出来。
你想解决的真正问题是什么?