Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menghias kelas dalam Python?

Bagaimana untuk menghias kelas dalam Python?

王林
王林ke hadapan
2023-05-26 14:43:061378semak imbas

如何在 Python 中装饰一个类?

Ia menggunakan pernyataan Python tambahan untuk mengubah suai objek lama dan mengembalikan rujukan yang sama.

Sebagai contoh, pertimbangkan kelas berikut, yang mempunyai dua kaedah: __init__ dan paparan. Kaedah __init__ memulakan pembolehubah nama apabila memaparkan nama output:

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

Untuk menghias kelas ini dalam Python, kita boleh menambah kaedah baharu pada kelas atau mengubah suai kaedah sedia ada, atau kedua-duanya.

Selain itu, terdapat dua cara untuk melakukan ini dalam Python, sama ada menggunakan penghias fungsi atau penghias kelas.

Mari kita lihat contoh satu persatu.

Menghiasi kelas menggunakan penghias fungsi

Untuk menghias kelas menggunakan penghias fungsi, terima kelas sebagai parameter, ubah suai kodnya dan kembalikan kelas pada penghujung.

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

Jika kaedah paparan tidak wujud dalam kelas, paparan baru akan ditambahkan pada kelas sebagai kaedah paparan.

  • Memandangkan rujukan kelas tersedia dalam fungsi penghias, selain mengubah suai kaedah sedia ada, kami juga boleh menambah sifat dan kaedah baharu pada kelas

Menghiasi kelas dengan penghias kelas

Untuk menghias kelas dengan penghias kelas, terima rujukan kepada kelas sebagai parameter (dalam kaedah __init__ penghias), dalam __call__ Ubah suai kodnya dalam kaedah, dan akhirnya mengembalikan contoh kelas yang diubah suai.

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

Satu-satunya perbezaan di sini ialah kita mengembalikan rujukan objek dan bukannya rujukan kelas.

Teks asal: ​​https://www.php.cn/link/137ffea9336f8b47a66439fc34e981ee​

Atas ialah kandungan terperinci Bagaimana untuk menghias kelas dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:51cto.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam