Rumah  >  Artikel  >  Java  >  Bagaimana untuk Mencapai Setara dengan Java\'s Class.forName() dalam Python?

Bagaimana untuk Mencapai Setara dengan Java\'s Class.forName() dalam Python?

DDD
DDDasal
2024-10-29 00:27:02285semak imbas

How to Achieve the Equivalent of Java's Class.forName() in Python?

Python's Flexible Reflection: Setara dengan Java's Class.forName()

Keupayaan pantulan Python adalah jauh lebih serba boleh dan mesra pengguna berbanding Java's Class.forName(). Walaupun mungkin tidak ada persamaan langsung yang tepat, memahami mekanisme pantulan Python membolehkan anda mencapai kefungsian yang serupa.

Pendekatan Refleksi Python

Refleksi Python menggunakan beberapa teknik penting:

  1. __import__: Mengimport modul yang diberi namanya sebagai rentetan.
  2. getattr: Mengambil atribut (modul, kelas, fungsi, dsb.) daripada objek yang ditentukan.
  3. Gelung: Secara berulang mendapatkan rujukan kepada modul dan kelas bersarang dalam nama yang layak sepenuhnya.

Fungsi Tersuai : get_class

Untuk menyediakan fungsi yang setara dengan Class.forName(), fungsi Python berikut boleh digunakan:

<code class="python">def get_class(kls):
    parts = kls.split('.')
    module = '.'.join(parts[:-1])
    m = __import__(module)
    for comp in parts[1:]:
        m = getattr(m, comp)
    return m</code>

Contoh Penggunaan

Fungsi ini membolehkan anda mendapatkan rujukan kelas daripada nama yang layak sepenuhnya:

<code class="python">>>> D = get_class("datetime.datetime")
>>> D
<type 'datetime.datetime'>
>>> D.now()
datetime.datetime(2009, 1, 17, 2, 15, 58, 883000)</code>

Cara ia Berfungsi

  • Nama kelas ialah berpecah kepada bahagian komponennya (nama modul dan nama kelas).
  • Modul diimport menggunakan __import__.
  • getattr berulang kali digunakan untuk melintasi modul bersarang dan mendapatkan rujukan kelas akhir.

Kesimpulan

Refleksi Python menawarkan cara yang berkuasa dan fleksibel untuk memanipulasi kelas dan objek. Walaupun ia berbeza daripada Class.forName() Java, ia menyediakan pendekatan yang lebih mudah disesuaikan dan kaya dengan ciri untuk mencapai matlamat yang serupa.

Atas ialah kandungan terperinci Bagaimana untuk Mencapai Setara dengan Java\'s Class.forName() 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