Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimanakah Saya Boleh Cari Semua Subkelas Kelas Python?

Bagaimanakah Saya Boleh Cari Semua Subkelas Kelas Python?

Patricia Arquette
Lepaskan: 2024-11-17 09:50:03
asal
273 orang telah melayarinya

How Can I Find All Subclasses of a Python Class?

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
Salin selepas log masuk

Untuk mendapatkan semula subkelas Foo, kita boleh menggunakan kod berikut:

print([cls.__name__ for cls in Foo.__subclasses__()])
Salin selepas log masuk

Ini akan mencetak nama subkelas:

['Bar', 'Baz']
Salin selepas log masuk

Kita juga boleh mendapatkan subkelas itu sendiri menggunakan __subclasses__ ():

print(Foo.__subclasses__())
Salin selepas log masuk

Ini akan mencetak senarai subkelas berikut:

[<class '__main__.Bar'>, <class '__main__.Baz'>]
Salin selepas log masuk

Untuk mengesahkan bahawa subkelas ini sememangnya mempunyai Foo sebagai kelas asasnya, kita boleh menggunakan kod berikut:

for cls in Foo.__subclasses__():
    print(cls.__base__)
Salin selepas log masuk

Ini akan mencetak perkara berikut:

<class '__main__.Foo'>
<class '__main__.Foo'>
Salin selepas log masuk

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))
Salin selepas log masuk

Ini akan mencetak:

{<class '__main__.Bar'>, <class '__main__.Baz'>, <class '__main__.Bing'>}
Salin selepas log masuk

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!

Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan