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

Comment décorer une classe en Python ?

王林
Libérer: 2023-05-26 14:43:06
avant
1459 Les gens l'ont consulté

如何在 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)
Copier après la connexion

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
'''
Copier après la connexion

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
'''
Copier après la connexion

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!

Étiquettes associées:
source:51cto.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal