Я ищу способ проверить количество аргументов, которые данная функция принимает в Python. Цель состоит в том, чтобы создать более надежный метод исправления моих классов для тестов. Итак, я хочу сделать что-то вроде этого:
class MyClass (object):
def my_function(self, arg1, arg2):
result = ... # Something complicated
return result
def patch(object, func_name, replacement_func):
import new
orig_func = getattr(object, func_name)
replacement_func = new.instancemethod(replacement_func,
object, object.__class__)
# ...
# Verify that orig_func and replacement_func have the
# same signature. If not, raise an error.
# ...
setattr(object, func_name, replacement_func)
my_patched_object = MyClass()
patch(my_patched_object, "my_function", lambda self, arg1: "dummy result")
# The above line should raise an error!
Спасибо.
4 ответа
Ты можешь использовать:
import inspect
len(inspect.getargspec(foo_func)[0])
Это не будет подтверждать параметры переменной длины, такие как:
def foo(a, b, *args, **kwargs):
pass
inspect
позволяет изучать аргументы функции. Об этом несколько раз спрашивали о переполнении стека; попробуйте найти некоторые из этих ответов. Например:
Получение имен параметров метода в python
inspect.getargspec
устарел в Python 3. Рассмотрим что-то вроде:
import inspect
len(inspect.signature(foo_func).parameters)
Вы должны использовать inspect.getargspec
.
Похожие вопросы
Связанные вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.