2017-08-12 5 views
-3

Wie kann ich Dekorateure auf Methoden verwenden, ist es außerhalb der Klasse setzen gibt nur eine Speicheradresse: <function decor at 0x104e167b8>, und es im Inneren wirft einWie werden Dekoratoren für Methoden verwendet?

TypeError: 'NoneType' object is not callabl

ich auch das Hinzufügen versucht *args haben setzen, da es eine self ist in der Parameter der Methode.

+3

Können Sie Ihren Code veröffentlichen, damit wir Ihre Frage besser verstehen können? – wencakisa

+2

Können Sie einige Codebeispiele für diese Fehler bereitstellen? – chrki

+2

Vielleicht hilft ein Blick in die [Dokumentation] (https://stackoverflow.com/documentation/python/229/decorators#t=201708121148482706389) –

Antwort

0

Eine Beispielimplementierung eines Dekorateur innerhalb einer Klasse geht so:

class Foo: 
    def __init__(self): 
     pass 

    def decor(function): 
     def wrap(*args, **kwargs): 
      # Whatever your decorator does here 
      return function(*args, **kwargs) 
     return wrap 

    @decor 
    @staticmethod 
    def bar(): 
     pass 

Oder diese von Foo auf einer Instanz anrufen:

foo = Foo() 
foo.bar() 

Wenn Ihr Dekorateur Zugang zu self benötigt:

class Foo: 
    def __init__(self, spam): 
     if spam is not None: 
      self.spam = spam 

    def require_spam(function): 
     def wrap(self, *args, **kwargs): 
      try: 
       self.spam 
      except AttributeError: 
       return 
      return function(self, *args, **kwargs) 
     return wrap 

    @require_spam 
    def bar(self): 
     pass 
Verwandte Themen