我继承了看起来像这样的代码:
class A:
def __init__(self):
print('A')
def foo(self, *args):
print('foo')
a = A()
setattr(a,'foo',types.MethodType(foo,a,A))
Run Code Online (Sandbox Code Playgroud)
对于最后一行,我想使代码2to3兼容,但是MethodType在python3中仅接受两个参数。
最简单的选择可能是使其智能地崩溃并
try:
setattr(a,'foo',types.MethodType(foo,a,A))
except TypeError:
setattr(a,'foo',types.MethodType(foo,a))
Run Code Online (Sandbox Code Playgroud)
但是后来我意识到我不明白为什么要在python2中添加第三个参数,因为它setattr(a,'foo',types.MethodType(foo,a))可以跨语言工作。
在Python2中,第三个参数是买我的东西,而不是将它绑定到类上?
>>> types.MethodType(foo,a)
<bound method ?.foo of <__main__.A instance at 0x1>>
>>> types.MethodType(foo,a,A)
<bound method A.foo of <__main__.A instance at 0x1>>
Run Code Online (Sandbox Code Playgroud)