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
Lepaskan: 2024-11-16 01:39:03
asal
958 orang telah melayarinya

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

Sebagai alternatif, untuk mendapatkan semula subkelas itu sendiri:

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

Untuk mengesahkan perkaitan kelas asas:

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

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

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]
      Salin selepas log masuk
    • Jika dalam mana-mana modul:

      import importlib
      modname, _, clsname = name.rpartition('.')
      mod = importlib.import_module(modname)
      cls = getattr(mod, clsname)
      Salin selepas log masuk
  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!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan