2012-06-09 44 views
19

Có bất kỳ quy ước đặt tên "được chấp nhận" nào cho nội trang của trình trang trí Python không?Quy ước đặt tên của Python trong trang trí

style guide không đề cập đến nó, và this awesome entry about decorators là khá nhất quán trong việc sử dụng các biến thể "bọc" cho hàm cuối cùng được trả về, nhưng còn sử dụng tên gì khi tạo trang trí.

def decorator_name(whatevs): 
    def inner(function): 
     def wrapped(*args, **kwargs): 
      # sweet decorator goodness 
     return wrapped 
    return inner 

Cụ thể, công ước cho inner, function, và wrapped trong ví dụ trên là gì?

Trả lời

17

Không có quy ước chuẩn nào (như PEP) cho những tên đó. Nếu bạn kiểm tra stdlib python bạn sẽ tìm thấy rất nhiều tên khác nhau cho các chức năng đó.

Tuy nhiên, decorator là tên khá phổ biến cho chức năng trang trí inner.
Việc gọi hàm wrappedwrapper và trang trí functools.wraps(f) với f là chức năng được bao bọc (func cũng là một tên chung cho nó).

def decorator_name(whatevs): 
    def decorator(f): 
     @wraps(f) 
     def wrapper(*args, **kwargs): 
      pass # sweet decorator goodness 
     return wrapper 
    return decorator 
+5

func có thể dễ đọc hơn f. – jfs

+3

Eh, nếu bạn có một hàm đối số đơn có tên là 'decorator' thì nó khá rõ ràng đối số của nó là gì dù nó được gọi là gì. – Ben

+0

Gọi hàm bên trong 'decorator' có lẽ là một ý tưởng rất hay, vì' decorator_name' không thực sự là một trang trí nhưng là một * decorator factory *, và nhiều lớp định nghĩa hàm lồng nhau có thể hơi khó hiểu. – Ben

0

Theo định nghĩa, trang trí trong Python có thể là một hàm hoặc một lớp, do đó loại triển khai (lớp hoặc hàm) là yếu tố quyết định sử dụng quy ước đặt tên. một sai lầm phổ biến là tiền tố tên của hàm với trình trang trí từ khóa. để biết thêm thông tin về trang trí, xem link

Các vấn đề liên quan