thể trùng lặp:
How can I programmatically change the argspec of a function in a python decorator?bảo tồn argspec khi trang trí?
argspec là một cách tuyệt vời để có được lập luận của một hàm, nhưng nó không hoạt động khi các chức năng đã được trang trí:
def dec(func):
@wraps(func)
def wrapper(*a, **k)
return func()
return wrapper
@dec
def f(arg1, arg2, arg3=SOME_VALUE):
return
import inspect
print inspect.argspec(f)
-----------
ArgSpec(args=[], varargs='a', keywords='k', defaults=None)
Argspec phải trả lại arg1
, arg2
, arg3
. Tôi nghĩ rằng tôi cần xác định wrapper
khác nhau là không sử dụng *a
và **k
, nhưng tôi không biết cách thực hiện.
Tôi rất vui vì có một mô-đun bên thứ 3 giải quyết được vấn đề của chúng tôi, vì vậy nhờ @MuMind đã chỉ ra, nhưng * tại sao * không được xử lý bởi thư viện chuẩn '' functools.wraps'' của Python trang trí, như bạn và tôi đều mong đợi? Đó là chính xác những gì nó cho, sau khi tất cả. Báo cáo lỗi? – pmos
Đối với những người quan tâm, tôi đã mở hộp giun ở đây: http://bugs.python.org/issue23764 – pmos