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

时间:2013-04-28 19:36:59

标签: python python-3.x

我想首先说我知道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中缺乏对如何处理这个问题的理解。

任何建议都将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:1)

应该使用

types.MethodType代替new.instancemethod

或者您可以从任何类获得实例方法:

instancemethod = type(Anyclass.method)

其中method是任何类方法

Adding a Method to an Existing Object Instance