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
240 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!

sumber:php.cn
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