[英]Python decorators using functools.partial.. Where does “func” come from?
[英]Python decorators - Where do parameters come from?
引用:
def overrides(interface_class):
def overrider(method):
assert(method.__name__ in dir(interface_class))
return method
return overrider
但是,如果我重寫任意方法,我仍然不確定參數method
來源。
我將嘗試解釋到目前為止我所了解的內容:
function
,它將替換我們用該裝飾器裝飾的功能。
但是我仍然不知道參數method
來自何處,為什么它始終是我們要覆蓋方法的類的方法而不是實例的實例。 類的方法通常將self
作為參數,並引用實例,這是錯誤的嗎?
我也閱讀了這個網站。 就像在他們的示例中一樣,裝飾器必須采用與裝飾函數所采用的相同的參數。
那么,為什么我們突然將方法而不是類作為參數呢?
編輯#1:在此網站上,我找到了一些示例,其中外部函數接收將要修飾的函數,而不是該函數或修飾符的參數。 裝飾者如何工作的邏輯似乎取決於條件,無論裝飾是否有參數。 但是這些規則是什么?
該網站的示例:
def pass_thru(func_to_decorate):
def new_func(*original_args, **original_kwargs):
print "Function has been decorated. Congratulations."
# Do whatever else you want here
return func_to_decorate(*original_args, **original_kwargs)
return new_func
# Notice nothing here now
def print_args(*args):
for arg in args:
print arg
# Notice the change here
pass_thru(print_args)(1, 2, 3)
您的第二點無效:
- 裝飾器的結果是一個
function
,它將替換我們用該裝飾器裝飾的功能。
從技術上講, overrides
將返回裝飾器以用於該方法。 代替
class Class(object):
@overrides(Interface)
def method(self):
pass
你可以寫
class Class(object):
overrider = overrides(Interface)
@overrider
def method(self):
pass
class Class(object):
def method(self):
pass
method = overrides(Interface)(method)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.