Penghias harta() dalam Python membenarkan seseorang mentakrifkan harta pada kelas, yang menyediakan akses kepada sesuatu yang khusus atribut. Walau bagaimanapun, apabila menggunakan penghias property() dengan kaedah yang ditandakan sebagai kaedah kelas menggunakan @classmethod, isu timbul kerana kaedah kelas tidak boleh dipanggil pada kejadian.
Memandangkan sifat dalam Python beroperasi pada instance dan bukannya kelas, penyelesaian boleh dilaksanakan menggunakan metaclass. Dalam Python metaclass bertanggungjawab untuk mencipta kelas secara dinamik dan boleh digunakan untuk menambah sifat pada kelas itu sendiri. Berikut ialah coretan kod yang diubah suai sedikit:
class foo(object): _var = 5 class __metaclass__(type): # Metaclass definition (Python 2 syntax) @property def var(cls): return cls._var @var.setter def var(cls, value): cls._var = value # Access and modify the class-level property using the class name foo.var # Get the initial value foo.var = 3 # Set the value
Dengan mentakrifkan sifat dalam metaclass, ia mempengaruhi kelas itu sendiri, membolehkannya memiliki sifat peringkat kelas yang boleh diakses melalui nama kelas.
Dalam Python versi 3.8 dan ke atas, @classmethod decorator boleh digunakan bersama dengan property() decorator. Coretan kod berikut menunjukkan:
class Foo(object): _var = 5 @classmethod @property def var(cls): return cls._var @var.setter @classmethod def var(cls, value): cls._var = value # Access and modify the class-level property using the class name Foo.var # Get the initial value Foo.var = 3 # Set the value
Dalam kes ini, kedua-dua @classmethod dan @property penghias boleh digunakan pada kaedah yang sama, membenarkan takrifan sifat peringkat kelas menggunakan kaedah kelas.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan Penghias Harta dengan Kaedah Kelas dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!