Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Melaksanakan Fungsi getattr untuk Modul dalam Python?

Bagaimana untuk Melaksanakan Fungsi getattr untuk Modul dalam Python?

DDD
DDDasal
2024-10-29 20:48:03362semak imbas

How to Implement getattr Functionality for Modules in Python?

Cara Melaksanakan getattr pada Modul

Dalam Python, objek boleh mempunyai atribut dinamik yang tidak ditakrifkan dalam definisi kelasnya. Tingkah laku dinamik ini dicapai melalui kaedah getattr, yang dipanggil apabila carian atribut gagal pada objek. Malangnya, modul tidak menyokong __getattr__ secara semulajadi.

Matlamatnya adalah untuk meniru fungsi getattr pada modul supaya apabila atribut tidak ditemui, contoh kelas yang dipratentukan dibuat dengan nama yang sama dan kaedah dengan nama itu digunakan pada kejadian itu.

Percubaan Pelaksanaan dan Cabaran

Percubaan telah dibuat untuk melaksanakan getattr pada modul seperti berikut:

<code class="python">class A(object):
    def salutation(self, accusative):
        print "hello", accusative

# intentionally on the module, not the class
def __getattr__(mod, name):
    return getattr(A(), name)

if __name__ == "__main__":
    salutation("world")  # hoping for __getattr__ to be invoked</code>

Penyelesaian Kemungkinan

  1. Kaedah Pembungkus:
  2. Modul sys. kamus adalah fleksibel dan membolehkan penciptaan pembungkus yang memintas akses modul. Walau bagaimanapun, ini hanya menyokong kaedah mengakses melalui modul, bukan dalam modul itu sendiri. Selain itu, mencipta kejadian baharu setiap kali boleh membawa kepada tingkah laku yang berbeza berbanding pendekatan global.
Penggantian Kelas:

Seperti yang disyorkan oleh Guido van Rossum, pendekatan godam melibatkan mencipta kelas dan menggantikan sys.modules[__name__] dengan contoh kelas itu. Ini membolehkan penggunaan __getattr__/__setattr__/__getattribute__. Walau bagaimanapun, ia disertakan dengan kaveat:

Semua atribut modul lain akan hilang selepas penggantian.

Untuk daripada import modul *,

semua mesti ditakrifkan dalam kelas untuk menyokong import kad bebas.

Kesimpulan

    Walaupun modul Python tidak menyokong __getattr__ secara asli, penyelesaian yang dicadangkan menyediakan penyelesaian untuk mencapai resolusi atribut dinamik yang serupa untuk modul.

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Fungsi getattr untuk Modul dalam Python?. 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