Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah saya boleh mencari subkelas kelas tertentu dalam Python?

Bagaimanakah saya boleh mencari subkelas kelas tertentu dalam Python?

DDD
DDDasal
2024-11-16 01:39:03960semak imbas

How can I find the subclasses of a given class in Python?

Mencari Subkelas Kelas dalam Python

Dalam Python, anda boleh menentukan subkelas kelas tertentu melalui __subkelas__( ) kaedah. Kaedah ini tersedia untuk kelas gaya baharu, yang diwarisi daripada kelas "objek" dan biasanya digunakan dalam Python 3.

Untuk mendapatkan nama subkelas:

class Foo(object): pass
class Bar(Foo): pass
class Baz(Foo): pass
class Bing(Bar): pass

[cls.__name__ for cls in Foo.__subclasses__()]
# ['Bar', 'Baz']

Sebagai alternatif, untuk mendapatkan semula subkelas itu sendiri:

Foo.__subclasses__()
# [<class '__main__.Bar'>, <class '__main__.Baz'>]

Untuk mengesahkan perkaitan kelas asas:

for cls in Foo.__subclasses__():
    print(cls.__base__)
# <class '__main__.Foo'>
# <class '__main__.Foo'>

Pendapatan Subkelas Rekursif:

Jika anda perlu menangkap subsubkelas (cucu, dll.), pendekatan rekursif diperlukan:

def all_subclasses(cls):
    return set(cls.__subclasses__()).union(
        [s for c in cls.__subclasses__() for s in all_subclasses(c)])

all_subclasses(Foo)
# {<class '__main__.Bar'>, <class '__main__.Baz'>, <class '__main__.Bing'>}

Nota: Jika definisi kelas subkelas belum dilaksanakan (mis., modulnya ialah tidak diimport), ia tidak akan dapat dikesan oleh __subkelas__().

Mendapatkan Subkelas daripada Nama Kelas:

Andaikan anda mempunyai nama kelas sebagai rentetan sebaliknya. Dalam kes itu, ikuti langkah berikut:

  1. Cari objek kelas menggunakan nama kelas:

    • Jika dalam modul yang sama:

      cls = globals()[name]
    • Jika dalam mana-mana modul:

      import importlib
      modname, _, clsname = name.rpartition('.')
      mod = importlib.import_module(modname)
      cls = getattr(mod, clsname)
  2. Gunakan __subkelas__() untuk mendapatkan subkelas bagi objek kelas yang diambil.

Atas ialah kandungan terperinci Bagaimanakah saya boleh mencari subkelas kelas tertentu dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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