Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Saya Boleh Cari Semua Subkelas Kelas dalam Python?
Mencari Semua Subkelas Kelas dalam Python
Untuk mendapatkan semula semua kelas yang diwarisi daripada kelas asas tertentu dalam Python, gunakan __subclasses__() kaedah. Kaedah ini tersedia untuk kelas gaya baharu yang memanjangkan kelas objek (lalai dalam Python 3). Begini caranya:
class Foo(object): pass class Bar(Foo): pass class Baz(Foo): pass class Bing(Bar): pass print([cls.__name__ for cls in Foo.__subclasses__()]) # ['Bar', 'Baz'] print(Foo.__subclasses__()) # [<class '__main__.Bar'>, <class '__main__.Baz'>]
Untuk memasukkan subsubkelas, rekursi boleh digunakan:
def all_subclasses(cls): return set(cls.__subclasses__()).union( [s for c in cls.__subclasses__() for s in all_subclasses(c)]) print(all_subclasses(Foo)) # {<class '__main__.Bar'>, <class '__main__.Baz'>, <class '__main__.Bing'>}
Nota: Subkelas yang belum ditakrifkan lagi (mis., disebabkan oleh modul yang tidak diimport) tidak akan dikesan oleh __subclasses__().
Mencari Subkelas Menggunakan Rentetan Nama Kelas:
Apabila hanya nama kelas tersedia sebagai rentetan, langkah berikut diperlukan:
Mencari Kelas daripada Rentetan Nama:
Kaedah untuk mencari kelas daripada rentetan nama bergantung pada lokasi yang dijangkakan:
Jika dijangka dalam masa yang sama modul:
cls = globals()[name]
Jika dijangka dalam ruang nama penduduk setempat:
cls = locals()[name]
Jika di mana-mana dalam modul:
import importlib modname, _, clsname = name.rpartition('.') mod = importlib.import_module(modname) cls = getattr(mod, clsname)
Setelah kelas ditemui, kaedah __subclasses__() boleh digunakan untuk dapatkan semula senarai subkelas yang dikehendaki.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Cari Semua Subkelas Kelas dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!