Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimanakah Anda Boleh Meniru Tingkah Laku Seperti Kelas dalam Modul Python?

Bagaimanakah Anda Boleh Meniru Tingkah Laku Seperti Kelas dalam Modul Python?

Mary-Kate Olsen
Lepaskan: 2024-10-29 19:04:02
asal
884 orang telah melayarinya

How Can You Mimic Class-Like Behavior in Python Modules?

Melaksanakan Gelagat Seperti Kelas Secara Dinamik dalam Modul Menggunakan getattr

Dalam sesetengah senario, mungkin wajar untuk meniru tingkah laku __getattr__ pada kelas tetapi untuk keseluruhan modul. Ini membenarkan penciptaan dinamik kejadian kelas dan penggunaan kaedahnya berdasarkan carian atribut pada modul.

Walau bagaimanapun, percubaan untuk mentakrifkan kaedah __getattr__ secara langsung pada modul menghadapi dua halangan:

  • Python hanya menyemak kaedah sedemikian pada kelas.
  • Mengubah suai jenis modul asas (modul) untuk membenarkan tetapan atribut tidak boleh dilaksanakan.

Penyelesaian Berasaskan Pembungkus

Satu pendekatan ialah membuat pembalut di sekeliling modul. Sys.modules bertolak ansur dengan jenis objek yang berbeza, jadi kita boleh membungkus modul di dalam kelas dan menetapkannya kepada sys.modules[__name__]. Ini membolehkan tingkah laku dinamik tanpa mengubah suai modul itu sendiri. Teknik ini, walau bagaimanapun, terpakai hanya untuk akses peringkat modul.

Guido van Rossum's Hack

Satu lagi penyelesaian yang dicadangkan oleh Guido van Rossum melibatkan penggantian modul sebenar dalam sys. modul dengan contoh kelas yang ditakrifkan dalam modul. Jentera import melakukan langkah penggantian terakhir ini, membolehkan penggodaman ini. Contoh berikut menunjukkan pendekatan ini:

<code class="python"># module foo.py

import sys

class Foo:
    def funct1(self, *args):
        <code block>
    def funct2(self, *args):
        <code block>

sys.modules[__name__] = Foo()</code>
Salin selepas log masuk

Kini, fungsi yang ditakrifkan dalam modul boleh diakses melalui contoh Foo.

Pertimbangan

Apabila menggunakan teknik ini, elemen modul lain mungkin tidak boleh diakses selepas tugasan sys.modules. Tentukan semua fungsi yang diperlukan dalam kelas gantian untuk mengelakkan kehilangan kandungan modul.

__all__ Atribut

Apabila menggunakan daripada import modul *, tentukan __all__ dalam kelas gantian untuk mengendalikan ini jenis penyata import. Abaikan atribut seperti __module__ dan __qualname__ daripada __all__.

Atas ialah kandungan terperinci Bagaimanakah Anda Boleh Meniru Tingkah Laku Seperti Kelas dalam Modul 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