Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimanakah Anda Boleh Melaksanakan Gelagat seperti `getattr` untuk Modul dalam Python?

Bagaimanakah Anda Boleh Melaksanakan Gelagat seperti `getattr` untuk Modul dalam Python?

Mary-Kate Olsen
Lepaskan: 2024-10-29 14:57:02
asal
795 orang telah melayarinya

How Can You Implement `getattr`-like Behavior for Modules in Python?

getattr Pelaksanaan dalam Modul

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:

  1. xxx hanya digunakan pada kelas itu sendiri, menjadikannya sukar untuk melaksanakan penggantian atribut untuk keseluruhan modul.
  2. Modul tidak boleh berubah, melarang penyerahan langsung atribut baharu kepada mereka menggunakan __setattr__.

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 seperti

getattr__. 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 pelaksanaan

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

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