您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

IPython autoreload为重复调用Python2 super()提供错误

5b51 2022/1/14 8:23:37 python 字数 4199 阅读 573 来源 www.jb51.cc/python

我正在一个IPython笔记本中的原型,它从我的计算机上的模块加载Python2代码.我激活了重新加载魔术命令,以便在我进行代码更改并重新运行单元格以查看其影响时,更容易在文本编辑器和笔记本之间来回切换:%reload_ext autoreload %autoreload 2 我在Python 2.7.10中工作,因为我使用了一些不能编译的遗留代码.我的部分

概述

我正在一个IPython笔记本中的原型,它从我的计算机上的模块加载Python2代码.我激活了重新加载魔术命令,以便在我进行代码更改并重新运行单元格以查看其影响时,更容易在文本编辑器和笔记本之间来回切换:

%reload_ext autoreload
%autoreload 2

我在Python 2.7.10中工作,因为我使用了一些不能编译的遗留代码.我的部分工作是扩展这些遗留代码中的一些类并重载它们的一些方法.但是,我还需要调用一些原始的基本方法来完成重要的工作.例如:

class LegacyBase:

    def important_method(self):
        #old stuff i'll need

class NewClass(LegacyBase):

    #overload base method
    def important_method(self):
       #do some new stuff

       while 1:
           #call old method to do stuff
           super(NewClass,self).important_method() #use old Python2 super calls :(

           #some break conditions

当我第一次在我的笔记本中调用了一些NewClass实例的important_method()时(意味着,在内核重置后),它运行正常.循环使得超级呼叫不止一次发生!没有错误

但是,如果我在我的文本编辑器中修改一些代码到我的新方法并返回到IPython单元并再次调用它,我在重载的important_method()中的行中得到以下错误,其中进行了超级调用.

TypeError: super(type,obj): obj must be an instance or subtype of type

注意:我尝试将新方法命名为另一个名称,因为我认为这与重载方法再次调用自身有关,但这没有帮助.此外,我希望它们是相同的名称,因为这是一个API方法,我希望遗留代码用户能够调用他们之前知道的相同方法.

知道如何使用这些Python2超级调用在IPython笔记本中重新加载吗?

谢谢!

您需要重新创建实例,或更新其__class__属性

instance_of_newclass.__class__ = NewClass

总结

以上是编程之家为你收集整理的IPython autoreload为重复调用Python2 super()提供错误全部内容,希望文章能够帮你解决IPython autoreload为重复调用Python2 super()提供错误所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶