我想首先说我知道python 3中不存在new.instancemethod
,而且技术上也没有重载函数。
但是,我正在查看一个旧的python包,它在脚本中使用new.instancemethod
,有效地允许overloaded functions
。
具体的套餐可以从this site找到,虽然我已经包含了我认为的相关部分。
我正在使用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
不再是{{1} }}
我需要这个的原因是因为a)它很有用而b)因为我目前正在将过时的IbPy包从2.56翻译成3.x. IbPy包基本上是Interactive Brokers的Java API,已经翻译成Python。
@overloaded放在前面的主要方法可以在下面找到:
None
请注意,@ synchronize只是一个强制同步多个函数的装饰器。代码很短,可以找到here,但我不相信它与我的问题相关。
所以经过那么长的解释,我怎样才能让@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()
看起来更加蟒蛇3?尽管昨晚和今天早上都在阅读有关它的内容,但我似乎无法理解正在发生的事情。我已经尝试了很多东西,我认为我在python中缺乏对如何处理这个问题的理解。
任何建议都将不胜感激。谢谢!
答案 0 :(得分:1)
types.MethodType
代替new.instancemethod
或者您可以从任何类获得实例方法:
instancemethod = type(Anyclass.method)
其中method是任何类方法