рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдореБрдЭреЗ рдкрд╛рдпрдерди рдХреЗ рд╕рд╛рде рдХрд╛рдлреА рдХрд╛рдо рдХрд░рдирд╛ рд╣реИред рд╡рд░реНрддрдорд╛рди рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА рдХрд┐ рдХреНрдпрд╛ рд╕рдЬрд╛рдпрд╛ рдЧрдпрд╛ рддрд░реАрдХрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдбреЗрдХреЛрд░реЗрдЯрд░ рджреНрд╡рд╛рд░рд╛ рд╕рдЬрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдорд╛рдирдХ рднрд╛рд╖рд╛ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдЙрдкрдХрд░рдг рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВред рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рдирд┐рд░реАрдХреНрд╖рдг рдореЙрдбреНрдпреВрд▓, рдЖрдк рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рддрд░реАрдХрд╛ рдкрд╕рдВрдж рдирд╣реАрдВ рдЖрдпрд╛ред
рдХрдЯреМрддреА рдХреЗ рддрд╣рдд, рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рд╕реНрд╡рдпрдВ рдХреА рд╡рд┐рдзрд┐ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдПрдХ рдЫреЛрдЯрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИред
рдЗрд╕рд▓рд┐рдП, рд╕рдЬреНрдЬрд╛рдХрд╛рд░реЛрдВ рдХреА рдПрдХ рд╡рд┐рд╢реЗрд╖ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдмрдирд╛рдиреЗ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ред рдпрд╛рдиреА рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ рдХрд┐рд╕реА рднреА рдбреЗрдХреЛрд░реЗрдЯрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВред рдЙрд╕рдХреЗ рдмрд╛рдж, рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдХреЗрд╡рд▓ рддрд░реАрдХреЛрдВ, рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдореЙрдбреНрдпреВрд▓ рдкрд░ рдкрдВрдЬреАрдХреГрдд рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдЯреНрд░реИрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдирд┐рдпрдо рд╣реИрдВред рдирд┐рд░реНрдорд┐рдд рдбреЗрдХреЛрд░реЗрдЯрд░реНрд╕ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдЪрд▓реЗрдЧрд╛ред рдпрд╣реА рд╣реИ, рджреБрд░реНрднрд╛рдЧреНрдпрд╡рд╢,
@staticmethod
,
@classmethod
рдФрд░ рдЬреИрд╕реЗ рд╕рдЬреНрдЬрд╛рдХрд╛рд░ рдЯреНрд░реИрдХ рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдВрдЧреЗ (рдпрджрд┐ рдХреЛрдИ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдкрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдмрд╣реБрдд рдЖрднрд╛рд░реА рд░рд╣реВрдВрдЧрд╛)ред рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд, рд╕рдЬрд╛рд╡рдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЛ рдЙрдирдХрд╛
рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкрдВрдЬреАрдХреГрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдХреЗ рдпрд╛рдВрддреНрд░рд┐рдХреА рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИрдВред рдбреЗрдХреЛрд░реЗрдЯрд░ рдХрд╛ рдкрдВрдЬреАрдХрд░рдг рдХрд░рдХреЗ, рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╕рдЬрд╛рдпрд╛ рд╣реБрдЖ рд╕реНрд░реЛрдд рдбреЗрдХреЛрд░реЗрдЯрд░ рдорд┐рд▓рддрд╛ рд╣реИ, рдЬреЛ рдЕрдкрдиреА рдореВрд▓ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдлрд╝рдВрдХреНрд╢рди рдХреЗ "__annotations__" рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдЬрд╛рдирдХрд╛рд░реА рд▓рд┐рдЦрддрд╛ рд╣реИред
рдпрджрд┐ рдПрдХ рдлрд╝рдВрдХреНрд╢рди (рдпрд╛ рд╡рд┐рдзрд┐) рдХреЛ рдХрдИ рдбреЗрдХреЛрд░реЗрдЯрд░реНрд╕ рдХреЗ рд╕рд╛рде рд╕рдЬрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕рднреА рдбреЗрдХреЛрд░реЗрдЯрд░реНрд╕ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдФрд░ рд╕рднреА рдбреЗрдХреЛрд░реЗрдЯрд░реНрд╕ рдХреЛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рд╣реИ рдХрд┐, рдлрд╛рд░реНрдо рдХрд╛ рдПрдХ рдбрд┐рдЬрд╛рдЗрди:
@decorator_one @decorator_two @decorator_three def some_function(): pass
рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
"рд░реЗрдЧ" рд▓рд╛рдЗрдмреНрд░реЗрд░реА (рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рдХрд╣рд╛ рдерд╛) рдкрд╛рдпрдерди 2.x рдФрд░ рд╕рдВрд╕реНрдХрд░рдг 3.x рджреЛрдиреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реИ (рд╣рдо рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рджреЛрдиреЛрдВ рд╢рд╛рдЦрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╕рдВрдЧрддрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХреА рдЧрдИ рдереА)ред
рдЧрд┐рддреБрдм рдкрд░ рд╕реНрд░реЛрдд рдЙрдкрд▓рдмреНрдз рд╣реИрдВ, рд▓рд╛рдЗрд╕реЗрдВрд╕, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдПрдордЖрдИрдЯреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдЬреЛ рдЪрд╛рд╣реЗрдВ рдХрд░реЗрдВред
рдкреНрд░рд▓реЗрдЦрди
рдпрд╣рд╛рдБ рд╣реИ ред
рдЖрдк рдЗрд╕реЗ рдХреЗрд╡рд▓ PyPI рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
$ pip install regd
рдиреАрдЪреЗ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрдж рджрд┐рдП рдЧрдП рд╣реИрдВред
1. рд╕рдЬреНрдЬрд╛рдХрд╛рд░реЛрдВ рдХрд╛ рдкрдВрдЬреАрдХрд░рдгред
рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд╛рдзрд╛рд░рдг рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ рд╡рд╛рд▓реЗ рдбреЗрдХреЛрд░реЗрдЯрд░ рдкрдВрдЬреАрдХреГрдд рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП:
from regd import DecoratorRegistry as dreg
2. рдкреНрд░рддрд┐рдмрд┐рдВрдм рдПрдкреАрдЖрдИ
API рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЕрдзрд┐рдХ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдкрд╣рд▓реЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдбреЗрдХреЛрд░реЗрдЯрд░ рдмрдирд╛рдПрдВ рдФрд░ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╕ рдореМрдЬреВрдж рд╣реИред
from regd import DecoratorRegistry as dreg # def mydecorator( fn) : # - ... def wrapper( *args, **kwargs) # ... - ... return fn( *args, **kwargs) return wrapper # mydecorator = dreg.decorator( mydecorator)
рдпрд╛рдж рд░рдЦреЗрдВ - рдЖрдкрдХреЛ рд╕рдЬрд╛рдиреЗ
рд╕реЗ рдкрд╣рд▓реЗ рд╕рдЬреНрдЬрд╛рдХрд╛рд░реЛрдВ
рдХреЛ рдкрдВрдЬреАрдХреГрдд
рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛
рд╣реИ ред
рдЕрдм, рдкрдВрдЬреАрдХрд░рдг рдХреЗ рдмрд╛рдж, рд╣рдо рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рдЕрдкрдиреЗ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
@mydecorator def myfunc() : pass
рдЕрдм, рдХрд┐рд╕реА рднреА рд╕рдордп, рдХреЛрдб рдореЗрдВ рдХрд╣реАрдВ рд╕реЗ рднреА, рд╣рдо рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдбреЗрдХреЛрд░реЗрдЯрд░ рджреНрд╡рд╛рд░рд╛ рд╕рдЬрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ:
print( dreg.is_decorated_with( myfunc, mydecorator))
рдХреБрдЫ рдФрд░ рдЙрдкрдпреЛрдЧреА рддрд░реАрдХреЗ:
all_decorated_module_functions( module, exclude_methods=False, exclude_functions=False)
- рдЖрдкрдХреЛ рджрд┐рдП рдЧрдП рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдбреЗрдХреЛрд░реЗрдЯрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рд╕рдЬрд╛рдП рдЧрдП рд╡рд░реНрдЧреЛрдВ рдХреЗ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдФрд░ / рдпрд╛ рддрд░реАрдХреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИредmodule_functions_decorated_with( module, decorator, exclude_methods=False, exclude_functions=False)
- рдЖрдкрдХреЛ рджрд┐рдП рдЧрдП рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рджрд┐рдП рдЧрдП рдбреЗрдХреЛрд░реЗрдЯрд░ рджреНрд╡рд╛рд░рд╛ рд╕рдЬрд╛рдП рдЧрдП рд╡рд░реНрдЧреЛрдВ рдХреЗ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдФрд░ / рдпрд╛ рддрд░реАрдХреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИредdecorated_methods( cls, decorator)
methods decorated_methods( cls, decorator)
- рд╣рдореЗрдВ рджрд┐рдП рдЧрдП рдбреЗрдХреЛрд░реЗрдЯрд░ рджреНрд╡рд╛рд░рд╛ рд╕рдЬреЗ рд╡рд░реНрдЧ / рд╡рд╕реНрддреБ рдХреЗ рд╕рднреА рддрд░реАрдХреЗ рдорд┐рд▓рддреЗ рд╣реИрдВget_decorators( fn)
- рджрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди / рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЬреНрдЮрд╛рдд рдбреЗрдХреЛрд░реЗрдЯрд░реНрд╕ рдХреА рд╕реВрдЪреА рд▓реМрдЯрд╛рдПрдЧрд╛get_real_function( fn)
- рдореВрд▓ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд▓рд┐рдВрдХ рд▓реМрдЯрд╛рдПрдЧрд╛, рдЬрд┐рд╕реЗ рдбреЗрдХреЛрд░реЗрдЯрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рд╕рдЬрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ (рд╣рд╛рдВ, рдЖрдк рдореВрд▓ рдлрд╝рдВрдХреНрд╢рди рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рдЬрд╛рд╡рдЯ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)is_decorated_with( fn, decorator)
- рдЪреЗрдХ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рджрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХреЛ рджрд┐рдП рдЧрдП рдбреЗрдХреЛрд░реЗрдЯрд░ рджреНрд╡рд╛рд░рд╛ is_decorated_with( fn, decorator)
рдЧрдпрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ
рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдХрд╛рдо рдЖрддрд╛ рд╣реИ рдпрд╛ рдЙрдкрдпреЛрдЧреА рд▓рдЧрддрд╛ рд╣реИред рд╕рднреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдФрд░ рд╕реБрдЭрд╛рд╡реЛрдВ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред