首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类界函数python 2和3

类界函数python 2和3
EN

Stack Overflow用户
提问于 2016-12-09 10:09:15
回答 1查看 227关注 0票数 1

在python 2中,我可以使用以下方法创建类绑定方法:

代码语言:javascript
复制
types.MethodType(func, None, cls)

但是,在python3中,MethodType不接受第三个参数。

如何在python 3中实现相同的行为?最好以在python2.7中仍然有效的方式进行。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-12 18:49:38

在Python3中,您似乎不再需要使用MethodType来创建类绑定方法(尽管您仍然需要它来分配实例绑定方法)。因此,如果要这样做的话:

代码语言:javascript
复制
class A:
  def __init__(self):
    pass
# end of class definition
# ...
# whoops I forgot a method for A
def foo(self, *args):
  pass

以后只需使用foo即可将A附加到A。(在Python2中,您必须使用A.foo = types.MethodType(foo, None, A)之类的。)

如果只想将foo添加到特定的A实例中,仍然可以使用MethodType,尽管(在Python3中)只有两个参数:

代码语言:javascript
复制
a = A()
a.foo = types.MethodType(foo, a)

(在Python2中,您必须使用a.foo = types.MethodType(foo, a, A)之类的。)

据我所见,如果您想要一个适用于这两个版本的策略,您必须这样做:

代码语言:javascript
复制
try:
  A.foo = types.MethodType(foo, None, A)
except TypeError:
  # too many arguments to MethodType, we must be in Python3
  A.foo = foo
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41057883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档