Mencari Subkelas Kelas Menggunakan Kaedah subkelas Python
Mencari semua subkelas kelas tertentu adalah perkara biasa keperluan dalam pengaturcaraan berorientasikan objek Python. Python menyediakan penyelesaian yang elegan melalui kaedah __subclasses__.
Kelas gaya baharu dalam Python (iaitu, kelas yang mewarisi daripada kelas objek) mempunyai kaedah __subclasses__ yang mengembalikan senarai subkelasnya. Pertimbangkan hierarki kelas berikut:
class Foo(object): pass class Bar(Foo): pass class Baz(Foo): pass class Bing(Bar): pass
Untuk mendapatkan subkelas Foo, cuma panggil Foo.__subclasses__():
print(Foo.__subclasses__()) # Output: [<class '__main__.Bar'>, <class '__main__.Baz'>]
Recursive Subclass Retrieval
Jika anda ingin mencari semua subkelas, termasuk subsubkelas, rekursi ialah perlu:
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)) # Output: {<class '__main__.Bar'>, <class '__main__.Baz'>, <class '__main__.Bing'>}
Berurusan dengan Rentetan Nama Kelas
Anda menyebut mencari subkelas yang diberi nama kelas sebagai rentetan. Memandangkan kelas Python ialah objek kelas pertama, adalah disyorkan untuk menggunakan kelas secara langsung dan bukannya perwakilan rentetan. Walau bagaimanapun, jika anda mempunyai rentetan nama kelas, anda boleh mendapatkan semula kelas menggunakan kamus globals():
name = 'Foo' cls = globals()[name] print(cls.__subclasses__())
Untuk kelas yang ditakrifkan dalam modul berbeza, anda boleh menggunakan importlib untuk mendapatkan semula kelas dengan mengimportnya modul dan mengakses atribut yang sepadan:
name = 'pkg.module.Foo' import importlib modname, _, clsname = name.rpartition('.') mod = importlib.import_module(modname) cls = getattr(mod, clsname) print(cls.__subclasses__())
Atas ialah kandungan terperinci Bagaimana untuk Mencari Subkelas Kelas Python Menggunakan `__subclass__`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!