Python: порядок разрешения метода объектов старого стиля (или классического) и нового стиля
Я много читал об объектах в документации на Python, которые в какой-то момент различают эти два типа:
- Старые экземпляры, независимо от их класса, реализованы с помощью одного встроенного типа, называемого экземпляром.
- Класс нового стиля не больше и не меньше пользовательского типа.
Может ли кто-нибудь объяснить мне больше об этом «старом стиле (или классическом) и новом стиле».
Я не могу понять, что эта строка пытается сказать:
«Для классов нового стиля порядок разрешения метода изменяется динамически, чтобы поддерживать совместные вызовы super ()».
- python beginner: невозможно инициализировать объект с нуля
- Python, используя методы из других классов
- Создание класса точек в Python
- Использование переменной класса в качестве аргумента не по умолчанию в python
- Метод класса Wrap Python
Старый стиль:
class BaseClass: def m1(self): return 1 class MyClass(BaseClass): def m1(self): return BaseClass.m1(self)
Новый стиль класса:
class BaseClass(object): def m1(self): return 1 class MyClass(BaseClass): def m1(self): return super(MyClass, self).m1()
У них много возможностей с использованием новых стилей классов, таких как:
-
super(classname, ...).method()
вместоparentclassname.method(...)
. Теперь родительский метод определяется из MRO (раньше он был определен вами). -
__slots__
– это новая функция, которая может помешать добавить dict () в ваш объект и выделить память только для атрибута в__slots__
- Свойства python (
@property
,property()
…) работают только с новыми стилями классов.
О MRO, проверьте документ . Порядок разрешения метода Python 2.3 . До 2.2 реализация была:
сначала глубина, а затем слева направо
в то время как новый – C3, намного сложнее, но обрабатывает различные случаи, которые предыдущий не обрабатывал правильно (проверьте сообщение Samuele Pedroni в списке рассылки python ).
- Специфические зависимости платформы Setuptools
- Как распечатать все возможности вложенных списков в python?
- Как открыть файл .exe с помощью класса в python?
- Является ли конструктор __init__ необходимым для класса в Python?
- Многие экземпляры класса
- Наследование класса Python: как инициализировать подкласс со значениями не в родительском классе
- Класс Python __div__
- Родительский метод вызова Python Множественное наследование
- Разница между доступом к атрибуту экземпляра и атрибутом класса
- Как использовать перегрузку метода в Python?
- Каков наилучший способ реализации структуры дерева команд SCPI в качестве методов класса Python?