cho phiên bản được mã hóa cứng hoạt động với các trang trí 'cư xử tốt'. Nó phải được khai báo sau khi chức năng. nếu chức năng được phục hồi sau này, những thay đổi được cập nhật tại đây.
def get_name_doc():
# global function # this is optional but makes your intent a bit more clear.
return function.__name__, function.__doc__
Đây là một hack khá khó chịu, ở chỗ nó lạm dụng theo cách mặc định args hoạt động. Nó sẽ sử dụng bất cứ chức năng nào bị ràng buộc vào lúc chức năng này được 'khởi tạo', và nhớ nó ngay cả khi chức năng được phục hồi. Gọi nó với args sẽ dẫn đến kết quả thú vị.
def get_name_doc(fn=function):
return fn.__name__, fn.__doc__
và mã động vẫn được mã hóa cứng nhưng cập nhật chức năng được gọi với đối số là True. Về cơ bản phiên bản này sẽ chỉ cập nhật khi được yêu cầu làm như vậy.
def get_name_doc(update=False):
global fn
if update:
fn = function
return fn.__name__, fn.__doc__
Bây giờ tất nhiên cũng có những ví dụ trang trí cho điều này.
@decorator # applying the decorator decorator to make it well behaved
def print_name_doc(fn, *args, **kwargs):
def inner(*args, **kwargs):
print(fn.__doc__, fn.__name__) # im assuming you just want to print in this case
return fn(*args, **kwargs)
return inner
bạn nên đọc trên trang trí trang trí (ít nhất). Nhìn vào nguồn NamedTuple (từ mô-đun bộ sưu tập) vì nó liên quan đến việc ghi chú mã hóa cứng. Đáng buồn thay, mã tuple được đặt tên khá lạ. Nó là một định dạng chuỗi được sử dụng với mã eval thay vì sau đó truyền thống, nhưng nó hoạt động thực sự gọn gàng. Đây có vẻ là biến thể hứa hẹn nhất. Bạn có thể làm điều này với metaclasess quá, dẫn đến mã gọn gàng, nhưng thay vì những thứ khó chịu ẩn đằng sau hậu trường, mà bạn cần phải mã. ID này khuyên chống lại
Tôi nghi ngờ rằng có thể có cách dễ hơn là kiểm tra/phản ánh/mẫu/metaclasess bằng cách thêm dòng sau vào cuối mô-đun.
help(<module>)
tên của mô-đun bạn đang làm việc trên (chuỗi). Hoặc thậm chí biến __name__. Điều này cũng có thể được thực hiện trong tệp __init__.py nếu làm việc với nhiều mô-đun hoặc trên các lớp riêng lẻ quá tôi nghĩ rằng.
Trong trường hợp đó, có cách nào để nhận chuỗi ký tự 'đúng' không? Bất kỳ công việc xung quanh giải pháp cho vấn đề? – George
@George, xem phần cuối bài đăng của tôi để biết ý tưởng. Tôi đã chơi xung quanh với những thứ như vậy chỉ cần hack xung quanh nhưng chưa bao giờ có thể làm cho nó làm việc ở một mức độ mà tôi coi là sản xuất đã sẵn sàng. – aaronasterling
Về 'inspect.stack()' trên liên kết này: http://stackoverflow.com/questions/900392/getting-the-caller-function-name-inside-another-function-in-python, làm thế nào anh biết chỉ mục nào để truy cập ngăn xếp? Tôi cho rằng đó không phải là một quyền đoán? Tôi quan tâm nếu bạn có thể tự động tìm ra 'chồng [x] [y]' để truy cập? – George