Ekspresi Biasa ialah alat pemadanan rentetan yang berkuasa Modul semula dalam Python menyediakan sokongan untuk ungkapan biasa. Ungkapan biasa boleh digunakan bukan sahaja untuk pemadanan rentetan, tetapi juga untuk pengaturcaraan reflektif, iaitu memanggil fungsi dan sifat secara dinamik. Artikel ini akan memperkenalkan cara menggunakan ungkapan biasa Python untuk pengaturcaraan reflektif.
Dalam Python, pantulan merujuk kepada mendapatkan maklumat secara dinamik tentang objek dan memanggil sifat dan kaedah objek semasa program sedang berjalan. Refleksi boleh mengakses objek dalam bentuk rentetan dan memanggil kaedah dan sifat objek secara dinamik. Objek dalam Python termasuk modul, kelas, contoh, dll.
Dalam pengaturcaraan reflektif, adalah sangat mudah untuk menggunakan ungkapan biasa untuk memadankan sifat dan kaedah objek. Katakan kita mempunyai objek obj dengan sifat dan kaedah berikut:
class MyClass(): a = "hello" def func(self): pass
Kita boleh menggunakan fungsi dir() untuk mendapatkan semua sifat dan kaedah obj:
obj = MyClass() print(dir(obj))
Ini akan mengeluarkan senarai mengandungi Semua sifat dan kaedah obj.
Jika kita ingin menggunakan ungkapan biasa untuk mendapatkan semua sifat dan kaedah yang mengandungi "e" dalam obj, kita boleh menggunakan fungsi penapis() dan modul semula untuk mencapai ini:
import re obj = MyClass() lst = [attr for attr in dir(obj) if re.search(r"e", attr)] print(lst)
Dengan cara ini, kita boleh mendapatkan obj Semua hasil yang mengandungi "e" dalam nama harta dan kaedah. Jika kita ingin memadankan sifat atau kaedah tertentu, kita boleh menggunakan fungsi search(), contohnya:
import re obj = MyClass() attr = "a" method = "func" if re.search(attr, dir(obj)): print(f"Found {attr}") if re.search(method, dir(obj)): print(f"Found {method}")
Selain padanan Kami juga boleh menggunakan ungkapan biasa untuk memanggil sifat dan kaedah objek secara dinamik. Mengambil obj di atas sebagai contoh, kita boleh menggunakan ungkapan biasa untuk memanggil atribut atau kaedah tertentu:
import re obj = MyClass() attr = "a" method = "func" if re.search(attr, dir(obj)): value = getattr(obj, attr) print(value) if re.search(method, dir(obj)): func = getattr(obj, method) func()
Dengan cara ini, kita boleh secara dinamik memperoleh nilai atribut a bagi obj dan memanggil kaedah func. Jika anda perlu menghantar parameter secara dinamik, anda boleh menggunakan borang seperti args dan kwargs, contohnya:
import re obj = MyClass() method = "func" args = [1, 2, 3] kwargs = {"key": "value"} if re.search(method, dir(obj)): func = getattr(obj, method) func(*args, **kwargs)
Dengan cara ini, anda boleh memanggil fungsi kaedah objek obj secara dinamik dan lulus parameter yang sepadan.
Ringkasan
Ekspresi biasa Python sangat berguna dalam pengaturcaraan reflektif, dan boleh memadankan dan memanggil sifat dan kaedah objek dengan mudah. Pengaturcaraan reflektif yang fleksibel boleh dicapai dengan menggunakan modul semula dengan fungsi seperti dir(), getattr(), dan setattr(). Apabila menggunakannya, anda perlu memberi perhatian kepada sintaks dan peraturan padanan ungkapan biasa, serta jenis objek dan konvensyen penamaan untuk atribut dan kaedah.
Atas ialah kandungan terperinci Cara menggunakan ungkapan biasa Python untuk pengaturcaraan reflektif. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!