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:
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)
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!