我在实例方法(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现在收到两个自我论证。
我对如何解决这个问题感到茫然,在两个(类似)类之间交换函数的正确方法是什么?
答案 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)’
我想说这是一个糟糕设计的标志。