在python 2中,我可以使用以下方法创建类绑定方法:
types.MethodType(func, None, cls)但是,在python3中,MethodType不接受第三个参数。
如何在python 3中实现相同的行为?最好以在python2.7中仍然有效的方式进行。
发布于 2017-02-12 18:49:38
在Python3中,您似乎不再需要使用MethodType来创建类绑定方法(尽管您仍然需要它来分配实例绑定方法)。因此,如果要这样做的话:
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中)只有两个参数:
a = A()
a.foo = types.MethodType(foo, a)(在Python2中,您必须使用a.foo = types.MethodType(foo, a, A)之类的。)
据我所见,如果您想要一个适用于这两个版本的策略,您必须这样做:
try:
A.foo = types.MethodType(foo, None, A)
except TypeError:
# too many arguments to MethodType, we must be in Python3
A.foo = foohttps://stackoverflow.com/questions/41057883
复制相似问题