Rumah  >  Artikel  >  Java  >  Bagaimana untuk Menghidupkan Kelas Secara Dinamik dalam Python: Adakah Terdapat Setara Class.forName()?

Bagaimana untuk Menghidupkan Kelas Secara Dinamik dalam Python: Adakah Terdapat Setara Class.forName()?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-03 11:32:03277semak imbas

How to Dynamically Instantiate Classes in Python: Is There a Class.forName() Equivalent?

Adakah Python Menawarkan Setara dengan Kaedah Java Class.forName()?

Keupayaan pantulan Python lebih meluas dan fleksibel berbanding Java. Artikel ini menjawab persoalan sama ada Python mempunyai persamaan Java Class.forName(), dan menyediakan penyelesaian Pythonic untuk membuat instantiating kelas secara dinamik daripada argumen rentetan.

Merefleksikan kaedah Class.forName() Java, yang mengambil masa nama kelas yang layak sepenuhnya sebagai input dan mengembalikan objek kelas yang sepadan, seseorang boleh membayangkan fungsi yang serupa dalam Python. Walau bagaimanapun, Python tidak mempunyai persamaan langsung.

Fungsi get_class() yang dibentangkan di bawah meniru gelagat Class.forName(), membolehkan penciptaan objek kelas daripada perwakilan rentetan:

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

Fungsi ini boleh digunakan seolah-olah ia adalah kelas itu sendiri.

Sebagai contoh, pertimbangkan berikut:

<code class="python">D = get_class("datetime.datetime")
D # Output: <type 'datetime.datetime'>
D.now() # Output: datetime.datetime(2009, 1, 17, 2, 15, 58, 883000)
a = D(2010, 4, 22)
a # Output: datetime.datetime(2010, 4, 22, 0, 0)</code>

Selain itu, artikel tersebut menyerlahkan perbezaan pantulan Python berbanding Java, dan menggalakkan penerokaan pendekatan Pythonic untuk mencapai kefungsian yang serupa.

Atas ialah kandungan terperinci Bagaimana untuk Menghidupkan Kelas Secara Dinamik dalam Python: Adakah Terdapat Setara Class.forName()?. 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