Mencari Subkelas Kelas mengikut Nama dalam Python
Masalah:
Bagaimana anda boleh mendapatkan semula semua kelas yang mewarisi daripada kelas asas tertentu dalam Python, menggunakan kelasnya name?
Penyelesaian:
Python menawarkan pendekatan yang elegan untuk mencari subkelas kelas tertentu mengikut namanya. Melalui kaedah __subclasses__, anda boleh mendapatkan semula subclass kelas secara terus.
Penjelasan Kod:
Dengan mengandaikan anda mempunyai kelas asas bernama Foo dengan subkelas Bar, Baz, dan Bing, coretan kod berikut menggambarkan penggunaan __subclasses__:
class Foo(object): pass class Bar(Foo): pass class Baz(Foo): pass class Bing(Bar): pass # Get the subclasses of Foo foo_subclasses = Foo.__subclasses__() print("Subclass names:", [cls.__name__ for cls in foo_subclasses]) print("Subclasses themselves:", Foo.__subclasses__()) # Validate that the subclasses inherit from Foo for cls in Foo.__subclasses__(): print("Base class of {}: {}".format(cls, cls.__base__))
Output:
Subclass names: ['Bar', 'Baz'] Subclasses themselves: [<class '__main__.Bar'>, <class '__main__.Baz'>] Base class of <class '__main__.Bar'>: <class '__main__.Foo'> Base class of <class '__main__.Baz'>: <class '__main__.Foo'>
Mencari Sub-subclass:
Jika anda perlu mencari sub-subclass, anda boleh menggunakan rekursif fungsi:
def all_subclasses(cls): return set(cls.__subclasses__()).union( [s for c in cls.__subclasses__() for s in all_subclasses(c)])
Nota:
Adalah penting untuk ambil perhatian bahawa untuk __subkelas__ berfungsi dengan berkesan, takrifan kelas bagi subkelas mestilah telah dilaksanakan sebelum ini. Jika anda mempunyai rentetan yang mewakili nama kelas, anda boleh mendapatkan semula kelas terlebih dahulu menggunakan teknik seperti globals(), locals(), atau importlib.
Atas ialah kandungan terperinci Bagaimana untuk Mengambil Subkelas Kelas dengan Nama dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!