- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
为了特定的调试目的,我想包装任意对象的 del 函数以执行额外的任务,例如将对象的最后一个值写入文件。
理想情况下我想写 猴子(x)应该是x被删除的时候打印出x的最终值
现在我认为 del 是一个类方法。所以下面是一个开始:
class Test:
def __str__(self):
return "Test"
def p(self):
print(str(self))
def monkey(x):
x.__class__.__del__=p
a=Test()
monkey(a)
del a
但是,如果我只想对特定对象进行猴子操作,我想我需要动态地将它们的类重写为一个新类?!此外,无论如何我都需要这样做,因为我无法访问内置类型的 del?
有人知道如何实现吗?
最佳答案
虽然特殊的“双下划线”方法,如 __del__
、__str__
、__repr__
等可以在实例级别进行猴子修补,它们将被忽略,除非它们被直接调用(例如,如果你采用 Omnifarious 的答案:del a
不会打印任何东西,但是 a. __del__()
会)。
如果你仍然想在运行时对类 A
的 单个实例 a
进行猴子修补,解决方案是动态创建一个类 A1
派生自 A
,然后将 a
的类更改为新创建的 A1
。是的,这是可能的,a
将表现得好像什么都没有改变——除了现在它包含了你的猴子修补方法。
这是一个基于我为另一个问题编写的通用函数的解决方案: Python method resolution mystery
def override(p, methods):
oldType = type(p)
newType = type(oldType.__name__ + "_Override", (oldType,), methods)
p.__class__ = newType
class Test(object):
def __str__(self):
return "Test"
def p(self):
print(str(self))
def monkey(x):
override(x, {"__del__": p})
a=Test()
b=Test()
monkey(a)
print "Deleting a:"
del a
print "Deleting b:"
del b
关于python - 猴子补丁 __del__ 到新功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6010282/
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我尝试过sp_helpindex,但它显示的是具有索引的列,而不是包含的列。请告诉我如何列出包含列(非键)的所有索引? 最佳答案 针对目录 View 尝试此 T-SQL 查询: SELECT
我是一名优秀的程序员,十分优秀!