Dekorieren Sie alle Funktionen einer Python-Klasse und haben Sie gleichzeitig Zugriff auf die Klassenattribute im DekoraPython

Python-Programme
Guest
 Dekorieren Sie alle Funktionen einer Python-Klasse und haben Sie gleichzeitig Zugriff auf die Klassenattribute im Dekora

Post by Guest »

Ich habe eine Klasse und möchte einen Dekorator auf alle Funktionen innerhalb dieser Klasse anwenden, ohne jeder einzelnen Funktion einen Funktionsdekorator hinzufügen zu müssen.
Ich weiß, dass es Lösungen wie die hier erklärten gibt. Wie alle Funktionen einer Klasse dekorieren, ohne sie für jede Methode immer wieder einzugeben? um der gesamten Klasse einen Dekorateur hinzuzufügen. Allerdings muss ich Zugriff auf alle Klassenattribute innerhalb des Decorators haben.
Wenn ich also den Decorator aus der anderen Lösung auf diese Weise verwende, müsste ich auf alle Eigenschaften von cls zugreifen können im f

Code: Select all

def function_decorator(orig_func):
def decorator(*args, **kwargs):
print("Decorating wrapper called for method %s" % orig_func.__name__)
result = orig_func(*args, **kwargs)
return result
return decorator

def class_decorator(decorator):
def decorate(cls):
# this doesn't work
# print(cls.name)
for attr in cls.__dict__:
if callable(getattr(cls, attr)):
setattr(cls, attr, decorator(getattr(cls, attr)))
return cls
return decorate

@class_decorator(function_decorator)
class PersonWithClassDecorator:
def __init__(self, name):
self.name = name

def print_name(self):
print(self.name)

me = PersonWithClassDecorator("Me")
me.print_name()
Die cls-Variable ist vom Typ .
Hat jemand eine Idee dazu? Wie erreicht man das? Ich habe mich auch mit Metaklassen befasst, bin aber auf das gleiche Problem gestoßen, dass ich nicht auf die Attribute meiner Klasse zugreifen konnte. Wir freuen uns über jede Hilfe :)

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post