Sudah tiba masanya untuk menggunakan metaclass, tetapi secara amnya, kami tidak memerlukannya sama sekali seperti yang dikatakan oleh Tim Peters, ketua komuniti Python:
Metaclasses ialah keajaiban kedalaman, dan 99% pengguna tidak sepatutnya. perlu melakukan ini semua. Jika anda tertanya-tanya sama ada anda memerlukan metaclass, anda tidak memerlukannya. Mereka yang benar-benar menggunakan kelas meta tahu dengan tepat apa yang mereka perlu lakukan dan tidak perlu menjelaskan mengapa mereka digunakan sama sekali.
Tujuan utama metaclass adalah untuk mencipta API. Contoh biasa ialah Django ORM. Ia membolehkan anda mentakrifkannya seperti ini:
class Person(models.Model): name = models.CharField(max_length=30) age = models.IntegerField()
Tetapi jika anda melakukan ini:
guy = Person(name='bob', age='35') print guy.age
ini tidak akan mengembalikan objek IntegerField, tetapi akan mengembalikan int, atau malah mendapatkan data terus daripada pangkalan data. Ini adalah mungkin kerana models.Model mentakrifkan __metaclass__ dan menggunakan beberapa keajaiban untuk menjadikan kelas Orang mudah yang baru anda tentukan menjadi cangkuk kompleks ke pangkalan data. Rangka kerja Django memudahkan perkara yang kelihatan rumit ini dengan mendedahkan API mudah menggunakan metaclass, yang melaluinya kod itu dicipta semula dan kerja sebenar dilakukan di belakang tabir.
Semua dalam Python ialah objek, ia sama ada contoh kelas atau metaclass, kecuali jenis. type sebenarnya adalah metaclassnya sendiri, yang merupakan sesuatu yang anda tidak boleh lakukan dalam persekitaran Python tulen Ia dilakukan melalui beberapa helah di peringkat pelaksanaan.
bahagian seterusnya