我在“hr.contract”中创建了一个生成工资条的函数。但是这个工资单是用来模拟和计算一些工资的,所以在创建工资单之后我必须删除它
此外,我还创建了一个函数,用于打印合同表单中的工资单报告。问题是,当我点击“打印”按钮时,我创建了工资条并返回了它的报告,但是我想不出删除创建的工资条的方法
def generate_report(self):
# I get this values from another methods,
# I put 1 and 20 just to avoid confution in the question.
run_id = 1
indicador_id = 20
payslip = self.generate_fake_nominee(run_id, self.employee_id.id, indicador_id, self.id)
report = payslip.print_nominee_report()
return report
回来后我不能做任何事情,有什么想法吗
假设
payslip
是唯一的引用,则应在函数返回时将其删除。如果它包含可能未正确清理的资源,则:它应该实现上下文管理协议,并且可以使用
with
语句:或者
如果需要手动调用某些清理函数,可以使用
finally
块:明确地说,将}都是未绑定的,而
del payslip
放在finally
块中是完全没有意义的;当函数返回时,名称将被解除绑定,因此del
不会完成任何操作。绑定到payslip
的对象无论如何都会被释放(如果它没有其他别名),或者它无论如何都不会被释放(它在别处有别名)^无论函数返回什么,当函数返回时,{del
所做的一切就是使解除绑定显式化,这会更慢、更冗长更新:原始代码中的
report
似乎对payslip
对象有一个活动的依赖关系,因此在调用方处理完报告之前,您无法实际清理payslip
。如果是这样,您还有两个选择:找出如何删除活动依赖项,以便
report
是一组独立的数据(取决于您没有向我们展示的代码,但这是最好的解决方案,如果可能的话)使用绑定到
report
的终结器,该终结器将保留payslip
,直到report
被垃圾回收,此时它将清理它,la:这个选项并不完美;即使在具有确定性引用计数的CPython上,如果涉及引用循环,即使使用了
report
,调用循环收集器和report
实际收集(以及调用清除函数)之前也可能需要任意时间。在具有真正垃圾收集器的非CPython解释器上,即使没有引用周期,也会发生这种情况相关问题 更多 >
编程相关推荐