2017-12-11 8 views
-1

@error_wrapはPythonのいくつかの関数の中にありますか?pythonで@error_wrapデコレータと同等のものは何ですか?

@error_wrap 
def disconnect(self): 
    """ 
    disconnect a client. 
    """ 
    logger.info("disconnecting snap7 client") 
    return self.library.Cli_Disconnect(self.pointer) 

error_wrap方法:このようなコード以下のように

def error_wrap(func): 
    """Parses a s7 error code returned the decorated function.""" 
    def f(*args, **kw): 
     code = func(*args, **kw) 
     check_error(code, context="client") 
    return f 

私はいくつかのOOP飾らPython関数、(すなわち@staticmethod、@classmethod、@abstractmethodおよびなど)について知っているが、私はすることができます@error_wrapについては見つかりません。
これらのコードに相当するものは何ですか?

+0

これは標準ライブラリのものではありません。だから、あなたはそれが使用されているのを見たコードベースでそれを検索しなければならないでしょう。おそらくそれはここからです:https://github.com/gijzelaerr/python-snap7/blob/master/snap7/server.py#L14 –

+0

ありがとうございます、私は内部の図書館のコードで(方法として)それを見つけるが、どのように作業? –

+0

@BenyaminJafariデコレータ(https://www.python.org/dev/peps/pep-0318/)です。 – Galen

答えて

1

Pythonデコレータも関数ですが、最初の引数として他の関数を受け取ります。コード怒鳴るのはあなた

def error_wrap(f): 
    # do something with received function f, then return it 

def disconnect(self): 
    # implementation of your function 

disconnect= error_wrap(disconnect) # <- notice the function `disconnect` isn't called 

そして今、あなたはerror_wrap関数が何をするのか知ってほしいと同じです。あなたがそれを見つけてコードを貼り付けるだけの別の関数なので、私たちはそれに答えることができません。

+0

'error_wrap'は上に貼り付けた関数です。 Decoratorは、別の関数を入力として受け取り、何かをしてからその関数を返す関数の単なる名前です。 これは重複してタグ付けされているので、別の質問を作成して、 'error_wrap'のコードが何をしているのかを尋ねることができます。乾杯 – Daniel

関連する問題