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

Mary-Kate Olsen
Lepaskan: 2024-10-30 06:39:03
asal
216 orang telah melayarinya

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>
Salin selepas log masuk

Kelas pembalut ini menyediakan tersuai Kaedah getattr dipanggil getattrmod.

Langkah 2: Gantikan Modul dengan Pembungkus

<code class="python">sys.modules[__name__] = Wrapper</code>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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 terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan