2017-12-11 11 views
-1

Was ist @error_wrap oben in einigen Funktionen in Python?
wie unten Code:Was entspricht @error_wrap Decorator in Python?

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

error_wrap Methode:

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 

Ich weiß, über mehrere OOP Python-Funktionen eingerichtet, (dh @staticmethod, @classmethod, @abstractmethod und etc), aber ich kann Finde nicht über @error_wrap.
Was ist gleichbedeutend diese Codes?

+0

Nun, es ist nicht aus der Standardbibliothek. Also müssen Sie danach in der Codebase suchen, in der Sie es benutzt haben. Wahrscheinlich ist es von hier: https://github.com/gijzelaerr/python-snap7/blob/master/snap7/server.py#L14 –

+0

Danke, ich finde es (als Methode) im inneren Bibliothekscode, aber wie es geht Arbeit? –

+0

@BenyaminJafari Es ist ein [Dekorateur] (https://www.python.org/dev/peps/pep-0318/). – Galen

Antwort

1

Python Dekoratoren sind auch Funktionen, aber Funktionen, die als ihr erstes Argument eine andere Funktion erhalten. Der Code unten ist das gleiche wie Sie

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 

Und jetzt wollen Sie wissen, was macht error_wrap Funktion tun. Nun, wir können das nicht beantworten, weil es nur eine andere Funktion ist, also sollten Sie sie finden und ihren Code einfügen, und dann antworten wir Ihnen.

+0

Die 'error_wrap' ist eine Funktion, die Sie oben eingefügt haben. Dekorator ist nur ein Name für eine Funktion, die eine andere Funktion als Eingabe verwendet und etwas ausführt und dann diese Funktion zurückgibt. Da dies als doppelt markiert wurde, können Sie eine weitere Frage erstellen, in der Sie fragen, was der Code von 'error_wrap' tut. Prost – Daniel