如何修复Python对象的一个被破坏的方法?

如何修复Python对象的一个被破坏的方法?,python,object,methods,Python,Object,Methods,在交互式Python会话中,我有时会做一些愚蠢的事情,比如 plot.ylimits = (0,100) 其中plot是某个plot类的实例,而ylimits是该类的一个方法。我本应该在这里输入: plot.ylimits(0,100) 按照Python的工作方式,plot对象现在有一个名为ylimits的新成员,该成员持有一个元组作为其值,而该方法(最初由plot类提供的可执行子例程,过去使用ylimits(…)调用)也消失了。也许在我脑海中的某个地方,我认为ylimits是一个属性,分配

在交互式Python会话中,我有时会做一些愚蠢的事情,比如

plot.ylimits = (0,100)
其中plot是某个plot类的实例,而ylimits是该类的一个方法。我本应该在这里输入:

plot.ylimits(0,100)
按照Python的工作方式,plot对象现在有一个名为ylimits的新成员,该成员持有一个元组作为其值,而该方法(最初由plot类提供的可执行子例程,过去使用ylimits(…)调用)也消失了。也许在我脑海中的某个地方,我认为ylimits是一个属性,分配给它会调用一些隐藏的setter方法,就像在其他一些语言中所做的那样

我怎样才能找回那种方法?在我使用了许多其他变量、函数等的交互式会话中,如何修复我的绘图对象

我发现重新加载(PlotModule)并不能完成这项工作。我破坏了一个具体的情节;刷新Plot类和其他内容的定义没有帮助


我正在使用Python2.7,一个简单的方法是执行
del plot.ylimits
。通常,方法是在类上定义的,而不是在实例上定义的。Python只是在每次尝试访问属性时查找属性,当它在实例上找不到属性时,就会转到类。当您执行
plot.ylimits=(0100)
时,您创建了一个新的实例属性,因此Python停止在那里,不查找class属性,即使它仍然存在
del plot.ylimits
将删除实例属性,现在
plot.ylimits
将通过在类中查找来再次访问该方法

但是请注意,这只在您重写的内容最初在类上而不是在实例上时才起作用。如果你真的在实例上存储了数据,并且你覆盖了它,它就永远消失了。

啊,布伦巴恩的答案比我的好得多,但仍然

使用plots类中的方法(假设您没有保留绑定方法)将其重新分配,并将其转换为MethodType,如下所示:

class C:

    def f(self):
        print "hello!"

c = C()

c.f = "opps!"

import types
c.f = types.MethodType(C.f, c)

c.f()
使用,然后可以根据需要重新运行和修改代码段


是一个交互式python解释器,它使用浏览器作为前端。初始设置有点痛苦,但对于探索性编码来说很好。

很好地解释了为什么这是一个合理的选择(我的第一个想法是将其分配回相关的
绘图方法)