Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Metaclasses Berfungsi dalam Python untuk Mencipta dan Menyesuaikan Kelas?
Metaclass bertanggungjawab untuk mencipta objek kelas dalam Python. Sama seperti kelas mencipta kejadian, metaclass mencipta kelas. Mereka menyediakan lapisan kawalan ke atas proses penciptaan kelas, membenarkan penyesuaian tingkah laku dan atribut kelas.
Dalam Python, kelas ialah objek yang menerangkan pelan tindakan untuk mencipta kejadian atau objek baharu. Ini bermakna kelas itu sendiri ialah kejadian yang dibuat daripada 'penerangan' kelas menggunakan kata kunci kelas. Oleh itu, pernyataan berikut mencipta objek kelas bernama ObjectCreator:
class ObjectCreator(object): pass
Memandangkan kelas ialah objek, anda boleh menciptanya secara dinamik, walaupun pada masa jalan. Fungsi jenis membolehkan anda menentukan kelas dengan memberikan nama, asas dan atributnya sebagai argumen. Ia mengembalikan objek kelas yang baru dicipta.
Foo = type('Foo', (), {'bar': True}) print(Foo) # <class '__main__.Foo'> print(Foo.bar) # True
Sekarang, kita datang ke metaclasses. Mereka adalah 'barang' yang mencipta objek kelas ini. Sama seperti kelas mencipta kejadian, metaclass mencipta kelas. Mereka secara berkesan ialah kelas di sebalik tabir yang Python gunakan secara automatik untuk mencipta kelas yang ditakrifkan menggunakan kata kunci kelas.
Dalam Python 2, anda boleh menentukan Atribut __metaclass__ apabila menentukan kelas untuk menggunakan metaclass tersuai untuk mencipta kelas itu. Dalam Python 3, ini telah digantikan dengan hujah kata kunci dalam senarai kelas asas.
# Python 2 class Foo(object, __metaclass__=MyMetaclass): ... # Python 3 class Foo(object, metaclass=MyMetaclass): ...
Metaclass boleh mengubah suai kelas yang diciptanya, membenarkan untuk dinamik tingkah laku kelas. Sebagai contoh, anda boleh mentakrifkan metaclass yang secara automatik menukar semua atribut kelas kepada huruf besar:
class UpperAttrMetaclass(type): def __new__(cls, clsname, bases, attrs): uppercase_attrs = { attr if attr.startswith('__') else attr.upper(): v for attr, v in attrs.items() } return super().__new__(cls, clsname, bases, uppercase_attrs)
Kemudian, anda boleh menggunakan metaclass ini untuk mencipta kelas dengan atribut huruf besar:
class Foo(object, metaclass=UpperAttrMetaclass): bar = 'bip' print(Foo.bar) # 'BIP'
Walaupun anda biasanya tidak memerlukan metaclass, mereka mendapati kes penggunaan dalam mencipta API yang abstrak kerumitan pengubahan kelas di sebalik antara muka yang mudah. Contohnya, ORM Django menggunakan metaclass untuk membolehkan anda mentakrifkan medan pangkalan data menggunakan pernyataan mudah seperti CharField dan IntegerField.
Metaclasses dalam Python ialah alat berkuasa yang memberi anda kawalan ke atas penciptaan kelas. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa ia adalah kompleks dan hanya boleh digunakan apabila perlu untuk mengelakkan komplikasi yang tidak perlu.
Atas ialah kandungan terperinci Bagaimanakah Metaclasses Berfungsi dalam Python untuk Mencipta dan Menyesuaikan Kelas?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!