Es verwendet zusätzliche Python-Anweisungen, um das alte Objekt zu ändern und dieselbe Referenz zurückzugeben.
Betrachten Sie beispielsweise die folgende Klasse, die über zwei Methoden verfügt: __init__ und display. Die Methode __init__ initialisiert die Namensvariable, wenn der Ausgabename angezeigt wird:
class Student: def __init__(self, name): self.name = name def display(self): print('Name:', self.name)
Um diese Klasse in Python zu dekorieren, können wir der Klasse neue Methoden hinzufügen oder vorhandene Methoden ändern oder beides.
Außerdem gibt es in Python zwei Möglichkeiten, dies zu tun, entweder mit einem Funktionsdekorator oder einem Klassendekorator.
Schauen wir uns die Beispiele einzeln an.
Um eine Klasse mit dem Funktionsdekorator zu dekorieren, akzeptieren Sie die Klasse als Parameter, ändern Sie ihren Code und geben Sie die Klasse am Ende zurück.
def mydecorator(student): #define a new display method def newdisplay(self): print('Name: ', self.name) print('Subject: Programming') #replace the display with newdisplay student.display = newdisplay #return the modified student return student @mydecorator class Student: def __init__(self, name): self.name = name def display(self): print('Name:', self.name) obj = Student('Pencil Programmer') obj.display() ''' Name: Pencil Programmer Subject: Programming '''
Wenn die Anzeigemethode in der Klasse nicht vorhanden ist, wird newdisplay als Anzeigemethode zur Klasse hinzugefügt.
Zu verwenden: Ein Klassendekorator dekoriert eine Klasse, akzeptiert einen Verweis auf die Klasse als Parameter (in der __init__-Methode des Dekorators), ändert seinen Code in der __call__-Methode und gibt schließlich eine Instanz der geänderten Klasse zurück.
class Mydecorator: #accept the class as argument def __init__(self, student): self.student = student #accept the class's __init__ method arguments def __call__(self, name): #define a new display method def newdisplay(self): print('Name: ', self.name) print('Subject: Python') #replace display with newdisplay self.student.display = newdisplay #return the instance of the class obj = self.student(name) return obj @Mydecorator class Student: def __init__(self, name): self.name = name def display(self): print('Name: ', self.name) obj = Student('Pencil Programmer') obj.display() ''' Name: Pencil Programmer Subject: Python '''
Der einzige Unterschied besteht darin, dass wir eine Referenz auf das Objekt anstelle einer Klassenreferenz zurückgeben.
Originaltext:https://www.php.cn/link/137ffea9336f8b47a66439fc34e981ee
Das obige ist der detaillierte Inhalt vonWie dekoriere ich eine Klasse in Python?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!