我想首先说我知道new.instancemethod
在 python 3 中不存在重载函数在技术上也不存在。
但是,我正在查看一个旧的 python 包,它new.instancemethod
在有效允许overloaded functions
.
尽管我已经包含了我认为是下面相关部分的内容,但可以从这个站点找到具体的包。
我正在使用 python 3,所以我需要将其转换为 python 3 的可用脚本。我已经使用了 2to3 工具并已经查看了大部分更改。但是,我被困在下面,我无法弄清楚要替换什么new.instancemethod
。
class overloaded:
...
def __get__(self, obj, type=None):
if obj is None:
return self
return new.instancemethod(self, obj)
重载的类在前面__init__
用作装饰器,这没有问题,但是当它在方法前面使用时,它是一个问题,因为obj
不再是None
.
我需要这个的原因是因为 a) 它很有用 b) 因为我目前正在将过时的 IbPy 包从 2.56 转换为 3.x。IbPy包基本上是Interactive Brokers的Java API翻译成Python。
@overloaded 放在前面的主要方法如下:
@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 只是一个强制同步多个函数的装饰器。代码很短,可以在这里找到,尽管我认为它与我的问题无关。
那么经过这么长的解释,我如何return new.instancemethod(self, obj)
才能看起来更像 python 3?尽管昨晚和今天早上都阅读了这件事,但我似乎无法理解正在发生的事情。我已经尝试了很多事情,我想我只是缺乏对如何处理这个问题的理解。
任何建议将不胜感激。谢谢!