Văn bản được sử dụng cho "trợ giúp" thực sự là thuộc tính "__doc__
" của một đối tượng. Vấn đề là tùy thuộc vào đối tượng bạn có, bạn không thể chỉ cần đặt thuộc tính __doc__
trên đối tượng đó.
Nếu những gì bạn cần là "help(object.attr)
" để hoạt động (và không phải là help(object)
cho bạn thấy tất cả các thuộc tính có thể) thì dễ hơn một chút - bạn chỉ nên nhận được shure rằng bất kỳ số tiền nào.
vì "nó không được làm việc" Tôi đoán bạn đang trả lại kết quả nội bộ của một số cuộc gọi chức năng, như trong đoạn này:
def __getattr__(self, attr):
if attr == "foo":
#function "foo" returns an integer
return foo()
...
Nếu bạn chỉ đơn giản là sẽ trả lại chức năng "foo" riêng của mình, mà không gọi nó, itś docstring sẽ được hiển thị bình thường.
Có thể làm gì là để bọc các giá trị trả về trong __getattr__
như một đối tượng của một Mà lớp tự động tạo ra có chứa một docstring thích - vì vậy, hãy thử sử dụng somethong như thế này:
def __getattr__(self, attr):
if attr == "foo":
#function "foo" returns an (whatever object)
result = foo()
res_type = type(result)
wrapper_dict = res_type.__dict__.copy()
wrapper_dict["__doc__"] = foo.__doc__ #(or "<desired documentation for this attribute>")
new_type = type(res_type.__name__, (res_type,), wrapper_dict)
# I will leave it as an "exercise for the reader" if the
# constructor of the returned object can't take an object
# of the same instance (python native data types, like int, float, list, can)
new_result = new_type(result)
elif ...:
...
return new_result
này nên làm việc - trừ Tôi đã sai động cơ tại sao hel không hoạt động ngay từ đầu - nếu đúng như vậy, xin vui lòng cho một số ví dụ về những gì bạn đang quay về từ __getattr__
.
Thannks, nó hoạt động trong trường hợp của tôi. Tất cả attr trong __getattr__ đều trả về các kiểu dữ liệu python gốc. –