10 методов получения списка имен классов в Python

В Python классы являются фундаментальной частью объектно-ориентированного программирования (ООП). Иногда вам может потребоваться получить список имен классов в вашем коде. В этой статье блога мы рассмотрим различные методы достижения этой цели, а также приведем примеры кода для каждого метода. Давайте погрузимся!

Метод 1: использование модуля проверки

import inspect
def get_class_names(module):
    classes = []
    for name, obj in inspect.getmembers(module):
        if inspect.isclass(obj):
            classes.append(name)
    return classes
# Example usage:
import my_module
class_names = get_class_names(my_module)
print(class_names)

Метод 2: использование dir()

import my_module
class_names = [item for item in dir(my_module) if isinstance(getattr(my_module, item), type)]
print(class_names)

Метод 3. Использование функции globals()

import my_module
class_names = [name for name, obj in globals().items() if inspect.isclass(obj)]
print(class_names)

Метод 4. Использование функции vars()

import my_module
class_names = [name for name, obj in vars(my_module).items() if inspect.isclass(obj)]
print(class_names)

Метод 5. Использование метаклассов

class Meta(type):
    def __init__(cls, name, bases, attrs):
        super().__init__(name, bases, attrs)
        if not hasattr(cls, 'class_names'):
            cls.class_names = []
        cls.class_names.append(name)
class MyClass(metaclass=Meta):
    pass
class_names = MyClass.class_names
print(class_names)

Метод 6: использование метода подклассов ()

class BaseClass:
    pass
class ChildClass(BaseClass):
    pass
class_names = [cls.__name__ for cls in BaseClass.__subclasses__()]
print(class_names)

Метод 7. Использование функции Inspect.getmembers()

import my_module
class_names = [name for name, _ in inspect.getmembers(my_module, inspect.isclass)]
print(class_names)

Метод 8. Использование функции isinstance()

import my_module
class_names = [name for name in dir(my_module) if isinstance(getattr(my_module, name), type)]
print(class_names)

Метод 9: использование декоратора

def track_classes(cls):
    if not hasattr(cls, 'class_names'):
        cls.class_names = []
    cls.class_names.append(cls.__name__)
    return cls
@track_classes
class MyClass:
    pass
class_names = MyClass.class_names
print(class_names)

Метод 10: использование пользовательского реестра

class ClassRegistry:
    classes = []
def register_class(cls):
    ClassRegistry.classes.append(cls.__name__)
    return cls
@register_class
class MyClass:
    pass
class_names = ClassRegistry.classes
print(class_names)

Получение списка имен классов в Python можно выполнить с помощью различных методов, каждый из которых подходит для разных сценариев. В этой статье мы рассмотрели десять различных методов, в том числе использование модуля inspect, dir(), globals(), vars(), метаклассы, __subclasses__(), inspect.getmembers(), isinstance(), декораторы и пользовательские реестры. Используя эти методы, вы сможете эффективно получать имена классов и совершенствовать свои навыки программирования на Python.