我想functools.partialmethod
在一个类方法上使用。然而,我发现的行为不是我所期望的(并且喜欢拥有)。这是一个例子:
class A(object):
@classmethod
def h(cls, x, y):
print(cls, x, y)
class B(A):
h = functools.partialmethod(A.h, "fixed")
当我做
>>> b = B()
>>> b.h(3)
我收到一个错误:
...
TypeError: h() takes 3 positional arguments but 4 were given
这与
>>> b.h()
<class '__main__.A'> <__main__.B object at 0x1034739e8> fixed
但是,我希望(并且希望拥有)以下行为:
>>> b.h(4)
<class '__main__.B'> fixed 4
我认为这被functools.partialmethod
视为B.h
一个普通的实例方法,并自动将实际实例作为第一个参数传递。但是这种行为functools.partialmethod
对于冻结继承类的类方法中的参数毫无用处。