Я хотел был бы использовать functools.partialmethod
на classmethod. Однако поведение, которое я нахожу, не то, что я ожидал бы (и хотел бы иметь). Вот пример:Комбинация functools.partialmethod и classmethod
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
Однако я ожидать (и li ка иметь) следующее поведение:
>>> b.h(4)
<class '__main__.B'> fixed 4
Я думаю, что functools.partialmethod
лечит B.h
как обычный метод экземпляра и автоматически передает фактический экземпляр в качестве первого аргумента. Но это поведение делает functools.partialmethod
бесполезным для замораживания аргументов в классах наследующих классов.
'' 'b.h()' '' или '' 'b.c()' ''? – wwii
Вы хотите переопределить метод класса в родительском классе посредством * fix * * одного из своих аргументов? – wwii
Будут ли все параметры позиционными или ключевыми словами или миксами? – wwii