2017-06-16 6 views
-1

In meiner Klasse ich diese Methode geschrieben:Python Dekorateur meine Funktionskontrolle

def ts_prep(self, test_id): 
    ltouple =() 
    tab_lib = temp_library.objects.filter(main_id=test_id) 
    l1 = ["Settings", ""] 
    ltouple += (l1,) 
    if tab_lib.count() == 0: ltouple = (l1, ["", ""]) 
    l = [] 
    for r in tab_lib.iterator(): 
     l.append(str(r.l_type)) 
     l.append(str(r.l_val)) 
     ltouple += (l,) 
     l = [] 

    tslist = [x for x in ltouple] 
    return tslist 

Wie könnte ich ein Dekorateur für meine Methode erstellen, die, wenn tab_lib Prüfung durchführen wenn Sie in allen Verfahren hinzuzufügen, die die gleiche Prüfung machen ?

ich versuche

def p_decorate(func): 
    def func_wrapper(test_id): 
     tab_lib = temp_library.objects.filter(main_id=test_id) 
     l1 = ["Settings", ""] 
     ltouple += (l1,) 
     if tab_lib.count() == 0: ltouple = (l1, ["", ""]) 
     return ltouple 
    return func_wrapper 

aber es scheint nicht

Vielen Dank im Voraus arbeiten

+1

Was ist die Funktion tut und was haben Sie versucht, so weit? SO ist kein Code-Schreibdienst. – Ding

Antwort

0

Zum einen kann der Code eine Menge in der Regel vereinfacht werden. Dies sollte äquivalent sein:

def ts_prep(self, test_id): 
    tab_lib = temp_library.objects.filter(main_id=test_id) 
    tslist = [["Settings", ""]] 
    if tab_lib.count() == 0: 
     tslist.append(["", ""]) 
    for r in tab_lib.iterator(): 
     tslist.append([str(r.l_type), str(r.l_val)]) 

    return tslist 

Um Ihre Frage zu beantworten, könnten Sie dann tun:

import functools 

def decorator(func): 
    @functools.wraps(func) 
    def wrapper(test_id): 
     tab_lib = temp_library.objects.filter(main_id=test_id) 
     tslist = [["Settings", ""]] 
     if tab_lib.count() == 0: 
      tslist.append(["", ""]) 
     return func(tab_lib, tslist) 

    return wrapper 

@decorator 
def ts_prep(self, tab_lib, tslist): 
    for r in tab_lib.iterator(): 
     tslist.append([str(r.l_type), str(r.l_val)]) 

    return tslist 
+0

AttributeError: PrepareRst-Instanz hat kein Attribut '__trunc__' –

+0

@ManuelSanti welcher Code löst diesen Fehler aus und an welcher Zeile und erhalten Sie nicht denselben Fehler mit Ihrem eigenen Code? –

+0

Vielen Dank, jetzt ist ok! –