Inspect.signature для методов классаPython

Программы на Python
Ответить
Anonymous
 Inspect.signature для методов класса

Сообщение Anonymous »

Может кто-нибудь помочь мне понять, почему Signature.bind(...).arguments отличаются, когда я вызываю метод класса напрямую, и когда я использую его в декораторе?
У меня есть декоратор ниже.
def decorator(func):
@functools.wraps(func)
def inner(*args, **kwargs):
print(inspect.signature(func).bind(*args, **kwargs).arguments)
return func(*args, **kwargs)
return inner

Когда этот декоратор запускается в методе класса, я получаю параметр cls в сигнатуре, как показано ниже.
class MyClass:

@classmethod
@decorator
def mymethod(cls, a, b):
return a + b

MyClass.mymethod(1, 2)

# returns:
# {'cls': , 'a': 1, 'b': 2}
# 3

Если я вызову Inspect.signature напрямую в методе класса, я получу другой результат или ошибку.
Этот первый блок выполняется успешно, но не возвращает параметр класса.
print(inspect.signature(MyClass.mymethod).bind(1, 2).arguments)
# returns {'a': 1, 'b': 2}

Эта ошибка устранена.
print(inspect.signature(MyClass.mymethod).bind(MyClass, 1, 2).arguments)
# TypeError: too many positional arguments


Подробнее здесь: https://stackoverflow.com/questions/795 ... ss-methods
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»