Maison >développement back-end >Tutoriel Python >Comment décorer une classe en Python ?

Comment décorer une classe en Python ?

王林
王林avant
2023-05-26 14:43:061460parcourir

如何在 Python 中装饰一个类?

Il utilise des instructions Python supplémentaires pour modifier l'ancien objet et renvoyer la même référence.

Par exemple, considérons la classe suivante, qui a deux méthodes : __init__ et display. La méthode __init__ initialise la variable name lors de l'affichage du nom de sortie :

class Student:
def __init__(self, name):
self.name = name
def display(self):
print('Name:', self.name)

Pour décorer cette classe en Python, on peut ajouter de nouvelles méthodes à la classe ou modifier des méthodes existantes, ou les deux.

De plus, il existe deux façons de le faire en Python, soit en utilisant un décorateur de fonction, soit en utilisant un décorateur de classe.

Regardons les exemples un par un.

Décorer une classe à l'aide de la fonction decorator

Pour décorer une classe à l'aide de la fonction decorator, acceptez la classe en paramètre, modifiez son code et renvoyez la classe à la fin.

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
'''

Si la méthode d'affichage n'existe pas dans la classe, newdisplay sera ajouté à la classe en tant que méthode d'affichage.

  • La référence de la classe étant disponible dans la fonction décorateur, en plus de modifier les méthodes existantes, nous pouvons également ajouter de nouvelles propriétés et méthodes à la classe

Utilisez le décorateur de classe pour décorer la classe

Pour utiliser Un décorateur de classe décore une classe, accepte une référence à la classe en paramètre (dans la méthode __init__ du décorateur), modifie son code dans la méthode __call__ et renvoie enfin une instance de la classe modifiée.

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
'''

La seule différence ici est que nous renvoyons une référence à l'objet au lieu d'une référence de classe.

Texte original :​​https://www.php.cn/link/137ffea9336f8b47a66439fc34e981ee​

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer