在交互式 Python session 中,我有时会做一些愚蠢的事情,比如
plot.ylimits = (0,100)
其中 plot 是某个 Plot 类的实例,而 ylimits 是它的一个方法。我应该利用这个:
plot.ylimits(0,100)
按照 Python 的工作方式,plot 对象现在有一个名为 ylimits 的新成员,它持有一个元组作为它的值,方法,最初由 Plot 类提供的可执行子例程,过去使用 ylimits(.. 。) 离开了。也许在我脑海中的某个地方,我认为 ylimits 是一个属性,并且分配给它会调用一些隐藏的 setter 方法,就像在其他一些语言中所做的那样。
我怎样才能取回那个方法?只是如何修复我的绘图对象,同时留在我使用了许多其他变量、函数等的交互式 session 中?
我发现 reload(theplotmodule) 无法完成这项工作。我破坏了 Plot 的一个特定实例;刷新 Plot 类和其他内容的定义没有帮助。
我正在使用 Python 2.7
最佳答案
一个简单的方法是执行 del plot.ylimits
。通常,方法是在类而不是实例上定义的。每次您尝试访问属性时,Python 都会查找它们,当它在实例上找不到它们时,它会转到类。当您执行 plot.ylimits=(0,100)
时,您创建了一个新的实例属性,因此 Python 停在那里并且不寻找类属性,即使它仍然存在。 del plot.ylimits
将删除实例属性,现在 plot.ylimits
将再次通过在类中查找来访问该方法。
但是请注意,这仅在您覆盖的内容最初位于类而非实例中时才有效。如果您实际上在实例上存储了数据,并且您覆盖了它,那么它就永远消失了。
关于python - 如何修复 Python 对象的破坏方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14352610/