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 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
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
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!