Definieren Sie einen Dekorator als Methode innerhalb der KlassePython

Python-Programme
Anonymous
 Definieren Sie einen Dekorator als Methode innerhalb der Klasse

Post by Anonymous »

Ich versuche, in meiner Klasse eine Methode zu erstellen, die die vollständige Ausführung einer bestimmten Funktion zählt. Ich möchte einen einfachen Dekorateur verwenden. Ich habe diese Referenz gefunden und dieses einfache Skript neu geschrieben:
class myclass:
def __init__(self):
self.cnt = 0

def counter(function):
"""
this method counts the runtime of a function
"""
def wrapper(self, **args):
function(**args)
self.counter += 1
return wrapper

@myclass.counter
def somefunc():
print("hello from somefunc")

if __name__ == "__main__":
obj = myclass()
# or if comment @myclass.counter
# somefunc = myclass.counter(somefunc)
somefunc()

Und natürlich bekomme ich:
TypeError: wrapper() missing 1 required positional argument: 'self'

Ich habe versucht, den Zähler als Klassenmethode umzuschreiben:
class myclass:
def __init__(self):
self.cnt = 0

def counter(self, function):
"""
this method counts the runtime of a function
"""
def wrapper(**args):
function(**args)
self.cnt += 1
return wrapper

def somefunc():
print("hello from somefunc")

if __name__ == "__main__":
obj = myclass()
somefunc = obj.counter(somefunc)
for i in range(10):
somefunc()
print(obj.cnt)

Was gut funktioniert, aber ich denke, es ist keine gültige Dekoratordefinition. Gibt es eine Möglichkeit, den Dekorator innerhalb der Klassenmethode zu definieren und das Selbstargument an seine Funktion zu übergeben? Oder ist es sinnlos, einen Dekorator innerhalb einer Klasse zu definieren?
BEARBEITEN:------
Erstens kann ich die Dekoration nicht außerhalb der Klassenmethode definieren. Zweitens versuche ich, eine geplante Klasse zu erstellen, die eine bestimmte Funktion (als Eingabe) für ein festes Intervall und eine bestimmte Zeitspanne ausführt, sodass ich sie zählen muss.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post