python - 如何修复 Python 对象的破坏方法?

标签 python object methods

在交互式 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/

相关文章:

java对象数组和继承

Java 方法不工作

java - 测试在整个软件中使用正确的参数调用该方法

function - Julia 模块调用用户定义函数

python - 在文件中加入一个字行

python - Mac 上 Python 的 Midi 库

python - 在 python 和 bash 中限制 glob

c++ - 如何适本地将指针设置为新结构?

python - 不懂Python的csv.reader对象

python - 网络X : Flip graph