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.
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.
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!