Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah saya boleh menyesuaikan perwakilan rentetan kelas Python menggunakan metaclass?

Bagaimanakah saya boleh menyesuaikan perwakilan rentetan kelas Python menggunakan metaclass?

Barbara Streisand
Barbara Streisandasal
2024-11-06 14:58:03855semak imbas

How can I customize the string representation of Python classes using metaclasses?

Perwakilan Rentetan Tersuai untuk Kelas: Pendekatan Pythonic

Dalam Python, mentakrifkan perwakilan rentetan anda sendiri untuk kelas boleh menawarkan kawalan yang lebih besar ke atas cara kelas dibentangkan. Tidak seperti perwakilan lalai yang menyerupai , anda mungkin mahu mencipta paparan yang lebih bermaklumat atau menarik secara visual. Artikel ini meneroka cara untuk menyesuaikan perwakilan rentetan kelas menggunakan metakelas.

Pertimbangkan kelas berikut:

class foo(object):
    pass

Secara lalai, menukar foo kepada rentetan menghasilkan:

>>> str(foo)
"<class '__main__.foo'>"

Untuk menyesuaikan perwakilan ini, anda boleh melaksanakan sama ada __str__() atau __repr__() dalam metaclass kelas. Kaedah ajaib ini bertanggungjawab untuk mengembalikan perwakilan rentetan kelas yang boleh dibaca dan tidak jelas.

Contoh berikut menunjukkan cara melaksanakan __repr__() tersuai dalam metaclass:

class MC(type):
    def __repr__(self):
        return 'Wahaha!'

class C(object):
    __metaclass__ = MC


print(C)

Kod ini akan mengeluarkan "Wahaha!" apabila anda mencetak kelas C.

Jika anda inginkan rentetan yang boleh dibaca, gunakan __str__; untuk perwakilan yang tidak jelas, gunakan __repr__. Python 3 memerlukan anda untuk menentukan metaclass dalam definisi kelas itu sendiri, seperti:

class MC(type):
    def __repr__(self):
        return 'Wahaha!'

class C(object, metaclass=MC):
    pass


print(C)

Atas ialah kandungan terperinci Bagaimanakah saya boleh menyesuaikan perwakilan rentetan kelas Python menggunakan metaclass?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:Unflatten dalam PyTorchArtikel seterusnya:Unflatten dalam PyTorch