Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Melaksanakan Akses Atribut Dinamik dengan Tingkah Laku seperti __getattr__ dalam Modul?

Bagaimana untuk Melaksanakan Akses Atribut Dinamik dengan Tingkah Laku seperti __getattr__ dalam Modul?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-30 06:39:03133semak imbas

How to Implement Dynamic Attribute Access with __getattr__-like Behavior in Modules?

Melaksanakan Gelagat seperti __getattr__ pada Modul

Pernyataan Masalah:

Untuk melanjutkan modul dengan kefungsian seperti __getattr__ yang mencipta kejadian secara dinamik kelas dan menggunakan kaedah padanya apabila mengakses atribut yang tidak wujud dalam modul.

Pendekatan: Balut Kefungsian Modul

Sementara kaedah getattr biasanya beroperasi pada kelas, ia tidak terpakai secara langsung kepada modul. Untuk menangani perkara ini, fungsi pembalut boleh dilaksanakan untuk mengubah hala akses atribut kepada contoh kelas penggantian.

Langkah 1: Laksanakan Kelas Penggantian

<code class="python">class Wrapper:
    def __init__(mod):
        setattr(mod, '__getattr__', getattrmod)</code>

Kelas pembalut ini menyediakan tersuai Kaedah getattr dipanggil getattrmod.

Langkah 2: Gantikan Modul dengan Pembungkus

<code class="python">sys.modules[__name__] = Wrapper</code>

Dengan menggantikan modul itu sendiri dengan pembungkus, sebarang akses atribut masa hadapan pada modul akan dipintas oleh kaedah getattr.

Langkah 3: Tentukan Kaedah getattr

<code class="python">def getattrmod(mod, attr):
    # Create an instance of the substitution class
    instance = Class()

    # Invoke the method with the same name as the missing attribute
    return getattr(instance, attr)</code>

Amaran: Kaveat dan Had

  • Pembungkus akan menggantikan semua atribut modul, jadi sebarang fungsi atau pembolehubah sedia ada akan hilang.
  • Untuk menyokong pengimportan semua elemen modul, kelas penggantian mesti mentakrifkan semua atribut.
  • Berhati-hati dengan potensi implikasi prestasi jika kelas penggantian dibuat seketika untuk setiap akses atribut.

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Akses Atribut Dinamik dengan Tingkah Laku seperti __getattr__ dalam Modul?. 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