До Python 3 все классы были old-style. В Python 2 новые классы создавались, наследуясь от object.
Основные отличия:
- Наследование:
- Old-style: Используется классический метод разрешения методов (Classic Method Resolution Order - CMRO).
- New-style: Используется C3 (линеаризация графа наследования).
- Дескрипторы:
- Old-style: Не используют дескрипторы (включая
__slots__, property).
- New-style: Полностью поддерживают дескрипторы.
- MRO для множественного наследования:
- Old-style: Может приводить к неинтуитивному поведению.
- New-style: Гарантирует корректный и предсказуемый порядок.
- Атрибуты
__class__ и __dict__:
- Old-style: Отличаются поведением.
- New-style: Более последовательны.
Пример нового класса в Python 2 (для демонстрации):
python
В Python 3 все классы по умолчанию являются new-style.
python