👍1👎1
«class С:
def act(self):
print('spam')
class E(С):
def method(self): # self подразумевается в super
proxy = super() # Эта форма не имеет смысла вне метода
print(proxy) # Вывод обычно скрытого промежуточного объекта
proxy.act() # Аргументы отсутствуют: неявно вызывает метод суперкласса
print(E().method())»
Пошагово:
1. E().method() создает экземпляр класса E и вызывает его метод method()
2. Внутри method():
- Создается proxy = super() (объект super)
- Выводится print(proxy) → <super: <class 'E'>, <E object>>
- Вызывается proxy.act() → выводится spam
3. Метод method() завершается без return, поэтому возвращает None
👍1👎1
🧩 @classmethod преобразует функцию в:
Anonymous Quiz
13%
статический метод
10%
метод экземпляра
5%
абстрактный метод
72%
метод класса
👍1👎1🤡1
«
В данном случае преимущества такие:
- Гибкость - разные способы создания объектов
- Читаемость - from_string явно показывает источник
- Наследование - если создать подкласс, cls автоматически будет указывать на него
👍3👎1
«В данном случае ветви дерева суперклассов разъединены (у них отсутствует явный общий предок), так что подклассы, которые их комбинируют, должны делать вызовы через каждый суперкласс по имени — распространенная ситуация с большинством существующего кода на Python, которую super не может решить напрямую без внесения изменений в код».
class В:
def __init__(self): print("B.__init__")
class С:
def __init__(self): print("C.__init__")
class D(В, С):
pass
x = D() # По умолчанию выполняется только крайний слева
Самый доступное объяснение этой концепции можно посмотреть на