В 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.