Heim  >  Artikel  >  Backend-Entwicklung  >  Wie dekoriere ich eine Klasse in Python?

Wie dekoriere ich eine Klasse in Python?

王林
王林nach vorne
2023-05-26 14:43:061379Durchsuche

如何在 Python 中装饰一个类?

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.

Dekorieren Sie eine Klasse mit dem Funktionsdekorator.

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.

  • Da die Referenz der Klasse in der Dekoratorfunktion verfügbar ist, können wir der Klasse nicht nur die vorhandenen Methoden ändern, sondern auch neue Eigenschaften und Methoden hinzufügen

Verwenden Sie den Klassendekorator, um die Klasse zu dekorieren

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:51cto.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen