Menambahkan Sifat Dinamik pada Kelas
Dalam usaha untuk mensimulasikan set hasil pangkalan data menggunakan kelas olok-olok, satu cabaran timbul: bagaimana untuk menetapkan dinamik sifat kepada contoh yang menyerupai kamus. Ini melibatkan penciptaan sifat yang berkelakuan seperti atribut dengan nilai tertentu.
Pada mulanya, pendekatan yang menjanjikan melibatkan penetapan sifat menggunakan:
setattr(self, k, property(lambda x: vs[i], self.fn_readyonly))
Walau bagaimanapun, ini menghasilkan objek harta dan bukannya tingkah laku yang diingini.
Penyelesaian terletak pada menambahkan sifat pada kelas itu sendiri, bukannya kejadian individu. Begini cara ia berfungsi:
class Foo(object): pass foo = Foo() foo.a = 3 Foo.b = property(lambda self: self.a + 1) print(foo.b) # Prints 4
Dalam contoh ini, kami menambah sifat b pada kelas Foo menggunakan deskriptor sifat. Apabila mengakses foo.b, Python memanggil kaedah __get__ deskriptor dan menghantar contoh kelas sebagai hujah. Kaedah __get__ kemudiannya mengembalikan nilai harta, yang dikira sebagai kendiri.a 1.
Sifat menyediakan cara yang mudah untuk mentakrifkan gelagat tersuai untuk atribut, mendedahkan paip sistem OO Python dengan berkesan.
Atas ialah kandungan terperinci Bagaimana untuk Menambahkan Sifat Dinamik pada Kelas seperti Entri Kamus?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!