Maison >développement back-end >Tutoriel Python >Comment décorer une classe en 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.
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.
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!