Penambahan Harta Dinamik dalam Python
Dalam Python, penambahan sifat dinamik pada kelas memberikan cabaran yang unik. Pada mulanya, seseorang mungkin cuba menambah sifat secara langsung ke contoh kelas menggunakan setattr. Walau bagaimanapun, pendekatan ini menetapkan objek sifat kepada atribut, mengalahkan tingkah laku yang diingini.
Penyelesaian
Untuk menambah sifat secara dinamik, ia mesti ditambah terus pada kelas itu sendiri. Pertimbangkan contoh berikut:
class Foo(object): pass foo = Foo() foo.a = 3 # Dynamically add property 'b' to class Foo.b = property(lambda self: self.a + 1) print(foo.b) # Outputs 4
Memahami Deskriptor
Sifat dalam Python dilaksanakan menggunakan deskriptor. Deskriptor ialah objek yang mengendalikan akses atribut pada kelas tertentu. Mereka mempunyai kaedah get__, __set__, atau __delete yang mentakrifkan cara atribut itu diakses, ditetapkan atau dipadamkan.
Python memanggil Foo.b.__get__(foo, Foo) apabila mengakses foo. b, dan nilai pulangan menjadi nilai atribut. Dalam kes ini, deskriptor sifat memanggil kaedah fgetnya, melepasi nilai tika itu.
Objek Kaedah sebagai Deskriptor
Kaedah itu sendiri ialah jenis deskriptor yang lain. Kaedah get mereka menambah contoh panggilan sebagai hujah pertama, mengikatnya secara berkesan pada contoh.
Ringkasnya, penambahan sifat dinamik dalam Python memerlukan melampirkan harta itu pada kelas itu sendiri, memanfaatkan Python sistem deskriptor. Ini membenarkan pengendalian tersuai bagi atribut berdasarkan setiap kelas.
Atas ialah kandungan terperinci Bagaimanakah anda Menambah Hartanah secara Dinamik ke Kelas dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!