Mengakses Subkelas Kelas
Dalam Python, mencari semua subkelas bagi kelas tertentu boleh dicapai melalui kaedah __subkelas__. Kaedah ini tersedia untuk kelas gaya baharu (yang mewarisi daripada objek dalam Python 3 atau subkelas daripada kelas gaya baharu).
Sebagai contoh, pertimbangkan kod berikut:
class Foo(object): pass class Bar(Foo): pass class Baz(Foo): pass class Bing(Bar): pass
Untuk mendapatkan semula subkelas Foo, kita boleh menggunakan kod berikut:
print([cls.__name__ for cls in Foo.__subclasses__()])
Ini akan mencetak nama subkelas:
['Bar', 'Baz']
Kita juga boleh mendapatkan subkelas itu sendiri menggunakan __subclasses__ ():
print(Foo.__subclasses__())
Ini akan mencetak senarai subkelas berikut:
[<class '__main__.Bar'>, <class '__main__.Baz'>]
Untuk mengesahkan bahawa subkelas ini sememangnya mempunyai Foo sebagai kelas asasnya, kita boleh menggunakan kod berikut:
for cls in Foo.__subclasses__(): print(cls.__base__)
Ini akan mencetak perkara berikut:
<class '__main__.Foo'> <class '__main__.Foo'>
Walau bagaimanapun, perlu diambil perhatian bahawa jika definisi kelas subkelas belum lagi dilaksanakan, ia tidak akan ditemui oleh __subkelas__. Untuk mengambil kira perkara ini, 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))
Ini akan mencetak:
{<class '__main__.Bar'>, <class '__main__.Baz'>, <class '__main__.Bing'>}
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Cari Semua Subkelas Kelas Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!