小编pet*_*tus的帖子

types.MethodType python2中的第三个参数

我继承了看起来像这样的代码:

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)

python python-2.7

7
推荐指数
1
解决办法
835
查看次数

标签 统计

python ×1

python-2.7 ×1