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

Bagaimanakah Saya Boleh Cari Semua Subkelas Kelas dalam Python?

Patricia Arquette
Lepaskan: 2024-11-15 06:05:02
asal
551 orang telah melayarinya

How Can I Find All Subclasses of a Class in 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'>]
Salin selepas log masuk

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

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:

  1. Cari kelas menggunakan nama kelas.
  2. Gunakan __subkelas__() untuk mendapatkan semula subkelas kelas yang terletak.

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]
    Salin selepas log masuk
  • Jika dijangka dalam ruang nama penduduk setempat:

    cls = locals()[name]
    Salin selepas log masuk
  • Jika di mana-mana dalam modul:

    import importlib
    modname, _, clsname = name.rpartition('.')
    mod = importlib.import_module(modname)
    cls = getattr(mod, clsname)
    Salin selepas log masuk

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!

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