Bagaimana untuk Menambahkan Sifat Dinamik pada Kelas seperti Entri Kamus?

Linda Hamilton
Lepaskan: 2024-11-12 10:55:03
asal
744 orang telah melayarinya

How to Add Dynamic Properties to Classes like Dictionary Entries?

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))
Salin selepas log masuk

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
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan