Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk membuat contoh metaclass yang berjalan pada Python2 dan Python3?

Bagaimana untuk membuat contoh metaclass yang berjalan pada Python2 dan Python3?

WBOY
WBOYke hadapan
2023-08-26 14:21:05864semak imbas

Bagaimana untuk membuat contoh metaclass yang berjalan pada Python2 dan Python3?

Metaclass ialah konsep dalam pengaturcaraan berorientasikan objek, di mana satu kelas adalah contoh kelas lain, dipanggil metaclass. Mereka membenarkan menyesuaikan penciptaan dan tingkah laku kelas, membolehkan penciptaan kelas dengan sifat dan kaedah tertentu. Metaclass ialah pelan tindakan untuk kelas itu sendiri, sama seperti kelas ialah pelan tindakan untuk contoh kelas itu. Ia boleh digunakan untuk menguatkuasakan piawaian pengekodan, mencipta API automatik atau melaksanakan tugas lanjutan lain yang tidak dapat dicapai oleh warisan standard.

Python menyokong metaclass, yang membolehkan penciptaan kelas tersuai dengan gelagat unik. Metaclasses juga boleh menambah kaedah atau sifat khas pada kelas, atau mengubah suai definisinya, yang berguna apabila anda perlu menambah gelagat khusus pada setiap contoh kelas.

Kami akan menggambarkan dua contoh untuk mencipta kelas meta yang dijalankan pada Python2 dan Python3. Akhir sekali, kita boleh mencipta metaclass menggunakan dua kaedah berbeza: "type()" dan "six.with_metaclass()".

Tatabahasa

class Mynewclass(type):
   def __init__(cls, name, bases, dict):
      pass

Dalam sintaks ini, kami menggunakan "__init__" untuk memulakan objek yang dicipta diluluskan sebagai parameter. "nama" mewakili nama kelas, manakala "asas" mentakrifkan tuple kelas asas yang akan diwarisi oleh kelas, dan "dikt" mentakrifkan kamus ruang nama yang mengandungi definisi kelas.

Contoh 1

Ini ialah contoh mencipta metaclass menggunakan fungsi "six.with_metaclass()", yang merupakan fungsi terbina dalam untuk mencipta kelas baharu dalam Python. Dalam contoh ini, kami memulakan kelas menggunakan kaedah "__new__" dan mencipta kelas dengan menyediakan kelas MyMClass kepada hujah kata kunci metaclass.

from six import with_metaclass
class MyMetaClass(type):
   def __new__(cls, name, bases, attrs):
      return super(MyMetaClass, cls).__new__(cls, name, bases, attrs)
class MyClass(with_metaclass(MyMetaClass)):
   pass
print(type(MyClass))

Output

<class '__main__.MyMetaClass'>

Contoh 2

Dalam contoh ini, kami menggunakan kaedah '__new__' metaclass kami boleh menggunakan pembolehubah Six.PY2 untuk menyemak versi Python yang digunakan dan mengendalikan sebarang perbezaan dengan sewajarnya. Kami kemudian mencetak versi Python dan memanggil kaedah super untuk mencipta kelas menggunakan tingkah laku jenis standard. Dengan menggunakan enam modul ini dan menyemak sintaks dan tingkah laku khusus untuk versi Python, kita boleh mencipta metaclass yang berfungsi dalam Python 2 dan Python 3.

import six
class MyMetaClass(type):
   def __new__(cls, name, bases, attrs):
      if six.PY2:
         print("This is python2")
         return super(MyMetaClass, cls).__new__(cls, name, bases, attrs)
      else:
         print("This is python3")
         return super(MyMetaClass, cls).__new__(cls, name, bases, attrs)       
class MyClass(six.with_metaclass(MyMetaClass)):
   pass 
print(type(MyClass))

Output

This is python3
<class '__main__.MyMetaClass'>

Kesimpulan

Kami mengetahui bahawa metaclass ialah alat berkuasa dalam Python yang membenarkan penciptaan dan tingkah laku kelas tersuai. Selain itu, Python 2 dan Python 3 mempunyai sintaks yang berbeza untuk mencipta dan menggunakan metaclass, tetapi terdapat cara untuk mencipta metaclass yang berfungsi untuk kedua-dua versi. Pustaka "enam" menyediakan fungsi pembantu "with_metaclass()" yang boleh digunakan untuk mencipta metaclass yang sesuai untuk kedua-dua versi Python.

Metaclasses ialah ciri Python yang berkuasa, tetapi ia juga merupakan topik lanjutan dan mungkin tidak diperlukan untuk semua projek. Satu kes penggunaan untuk metaclass adalah untuk mencipta bahasa khusus domain (DSL) yang menyasarkan domain masalah tertentu. Sebagai contoh, metaclass boleh digunakan untuk mencipta DSL yang menerangkan antara muka pengguna, membenarkan pembangun mencipta komponen UI menggunakan sintaks yang mudah dan intuitif. Secara keseluruhan, metaclass ialah alat yang berkuasa untuk menyesuaikan tingkah laku kelas dan mencipta fungsi Python lanjutan.

Atas ialah kandungan terperinci Bagaimana untuk membuat contoh metaclass yang berjalan pada Python2 dan Python3?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam