new.instancemethod在重载脚本中转换为python 3.3

new.instancemethod在重载脚本中转换为python 3.3,python,python-3.x,Python,Python 3.x,首先,我想说我知道Python3中不存在new.instancemethod,重载函数在技术上也不存在 然而,我看到的是一个旧的python包,它在脚本中使用了new.instancemethod,有效地允许重载函数 具体的软件包可以从中找到,尽管我已经包括了我认为是下面的相关部分 我正在使用Python3,因此需要将其转换为Python3的可用脚本。我已经使用了2to3工具并回顾了大部分更改。然而,我被困在下面的问题上,我不知道用什么替换new.instancemethod class ove

首先,我想说我知道Python3中不存在
new.instancemethod
,重载函数在技术上也不存在

然而,我看到的是一个旧的python包,它在脚本中使用了
new.instancemethod
,有效地允许
重载函数

具体的软件包可以从中找到,尽管我已经包括了我认为是下面的相关部分

我正在使用Python3,因此需要将其转换为Python3的可用脚本。我已经使用了2to3工具并回顾了大部分更改。然而,我被困在下面的问题上,我不知道用什么替换
new.instancemethod

class overloaded:
    ...

    def __get__(self, obj, type=None):
        if obj is None:
            return self
        return new.instancemethod(self, obj)
类重载在
\uuuu init\uuuu
前面用作装饰器,这不会带来任何问题,但在方法前面使用它时会出现问题,因为
obj
不再是
None

我之所以需要它,是因为a)它很有用,b)因为我目前正在将过时的IbPy包从2.56翻译成3.x。IbPy包基本上是翻译成Python的交互式代理的javaapi

@重载放在前面的主要方法如下:

@overloaded
@synchronized(mlock)
def eConnect(self, host, port, clientId):
    host = self.checkConnected(host)
    if host is None:
        return
    try:
        socket = Socket(host, port)
        self.eConnect(socket, clientId)
    except Exception as e:
        self.eDisconnect()
        self.connectionError()
请注意,@synchronize只是一个装饰程序,它强制同步多个函数。代码很短,可以找到,但我认为它与我的问题无关

那么,在经过长时间的解释之后,我如何让
返回new.instancemethod(self,obj)
来查看更多的python 3呢?尽管昨天晚上和今天早上我都在读关于这件事的书,但我似乎无法对正在发生的事情了如指掌。我已经尝试了很多东西,我想我只是缺乏python对如何处理这个问题的理解


如有任何建议,将不胜感激。谢谢

应使用types.MethodType
而不是new.instancemethod

或者,您可以从任何类获取instancemethod:

instancemethod = type(Anyclass.method)
其中method是任意类方法


类型。应使用MethodType
而不是new.instancemethod

或者,您可以从任何类获取instancemethod:

instancemethod = type(Anyclass.method)
其中method是任意类方法


有趣的是,我之前用过这个,但一定是切换了参数,因为当时它不起作用。不管怎样,它是有效的。谢谢有趣的是,我之前用过这个,但肯定是换了个论点,因为那次不起作用。不管怎样,它是有效的。谢谢