Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara menggunakan ungkapan biasa Python untuk pengaturcaraan reflektif

Cara menggunakan ungkapan biasa Python untuk pengaturcaraan reflektif

王林
王林asal
2023-06-22 14:00:20860semak imbas

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.

  1. Konsep pantulan

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.

  1. Gunakan ungkapan biasa untuk memadankan sifat dan kaedah objek

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}")
  1. Gunakan ungkapan biasa untuk memanggil sifat dan kaedah objek

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!

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