类方法交换保持老班'自我'?

时间:2018-05-01 02:14:23

标签: python python-3.x

我在实例方法(python3)之间正确地进行交换时遇到了麻烦。

我们说我有SomeClass:

class SomeClass:

    def pSelf(self):
        # Do stuff with self.variables

在我的特定情况我有两个这个类的实现,一个正确的版本和一个错误的版本

现在我将实例化SomeClass类型的两个对象(标记为C表示正确,B表示错误):

objOne = SomeClassC()
objTwo = SomeClassB()

我希望objTwo能够正确实现pSelf:

objTwo.pSelf = objOne.pSelf

然而,obSOne的pSelf方法必然是objOne,所以:

objTwo.pSelf() # This will do stuff with objOne.self!

我尝试导入类型并执行以下操作:

objTwo.pSelf = types.MethodType(objOne.pSelf, objTwo)

据我所知,这正确地将pSelf函数绑定到objTwo, 然而,我收到一个不正确的参数错误 - 大概是因为objTwo.pSelf现在收到两个自我论证

我对如何解决这个问题感到茫然,在两个(类似)类之间交换函数的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

在使用方法和某个对象

之前,需要获取方法的函数
<interactive>:3:55: error:
    • Illegal instance declaration for ‘Traversable t’
        (All instance types must be of the form (T a1 ... an)
         where a1 ... an are *distinct type variables*,
         and each type variable appears at most once in the instance head.
         Use FlexibleInstances if you want to disable this.)
    • In the instance declaration for ‘(Traversable t)’

我想说这是一个糟糕设计的标志。