Tôi chỉ thấy các ví dụ để thiết lập phương thức __repr__
trong định nghĩa lớp. Có thể thay đổi __repr__
cho các chức năng hoặc trong định nghĩa của chúng hoặc sau khi xác định chúng?Có thể thay đổi chức năng repr trong python không?
Tôi đã cố gắng nhưng không thành công ...
>>> def f():
pass
>>> f
<function f at 0x1026730c8>
>>> f.__repr__ = lambda: '<New repr>'
>>> f
<function __main__.f>
Vui lòng sử dụng 'functools.wraps' để trang trí để cập nhật tên và chuỗi tài liệu của các chức năng được trang trí. – schlamar
Vấn đề là 'print mul42 .__ name__' sẽ tăng AttributeError mà không được mong đợi cho một hàm. Vì vậy, nó sẽ là: 'return wraps (func) (reprwrapper (reprfun, func))' để sửa lỗi này. – schlamar
@ ms4py Trong trường hợp này, tôi nghĩ 'update_wrapper' hơi phù hợp/trực tiếp hơn một chút. Tôi đã sửa đổi lớp bao bọc để nó thực hiện điều này trong hàm tạo của nó. Bằng cách này, cập nhật xảy ra ngay cả khi bạn sử dụng lớp trực tiếp thay vì sử dụng trang trí 'withrepr'. – kwatford