Apabila menghadapi kegagalan pencarian atribut dalam modul, terdapat keinginan untuk mencipta contoh kelas yang dikaitkan dengan modul dan gunakan kaedah dengan nama yang sama dengan atribut yang gagal. Walau bagaimanapun, ini tidak disokong secara langsung dalam Python kerana pengehadan dengan kaedah xxx dan sekatan pada mengubah suai atribut modul.
Dua cabaran yang dihadapi ialah:
Penyelesaian
Untuk mengatasi batasan ini, penyelesaiannya ialah dengan mencipta contoh pembalut kelas penggantian dan menyimpannya dalam sys.modules sebagai ganti kepada modul asal. Ini secara berkesan mengubah hala semua carian atribut kepada contoh pembalut, membenarkan pelaksanaan gelagat sepertigetattr__. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa pendekatan ini boleh membawa kepada tingkah laku yang berbeza berbanding dengan menggunakan __getattr terus pada modul memandangkan pembungkus mencipta tika baharu setiap kali.
Guido van Rossum's Hack
Guido van Rossum mencadangkan pendekatan alternatif yang memanfaatkan elaun jentera import untuk penggantian modul dalam sys.modules dengan kejadian atau kelas. Dalam kaedah ini, kelas dengan kefungsian yang diingini ditakrifkan dalam modul dan diberikan kepada sys.modules[__name__] sebagai tindakan terakhir modul. Ini membolehkan pelaksanaangetattr dan ciri pengaturcaraan meta lain pada modul itu sendiri. Walau bagaimanapun, adalah penting untuk memastikan bahawa semua fungsi yang diperlukan dirangkumkan dalam kelas gantian, kerana elemen lain modul akan hilang semasa tugasan sys.modules.
Atas ialah kandungan terperinci Bagaimanakah Anda Boleh Melaksanakan Gelagat seperti `getattr` untuk Modul dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!