/
IvanKhabarov
/
python
Обзор
Документация
Войти
/
IvanKhabarov
/
python
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
Lections/Lesson11/4-Math_and_log/task_methods_3.py
34 строки
2 KB
Ivan-Khabarov
Добавлен урок 11
29 сен 2024, 13:44
29 сен 2024, 13:44
833c32c
Код
Авторство
О чём код?
# Right методы # Right методы срабатывают в том случае, если у левого аргумента в выражении # метод не был найден. Например при записи x + y вначале производится поиска # дандер метода x.__add__. Если он не найден, вызываем y.__radd__. # Умножение текста на “продвинутый текст” # методом __rmul__ # Создадим класс на основе str с методом __rmul__. Если слева оказывается обычная # строка, будем между словами добавлять текст из “продвинутой строки”, # перемножим их. class StrPro(str): def __new__(cls, *args, **kwargs): instance = super().__new__(cls, *args, **kwargs) return instance def __rmul__(self, other: str): words = other.split() result = self.join(words) return StrPro(result) text = 'Каждый охотник желает знать где сидит фазан' s = StrPro(' (=^.^=) ') print(f'{text = }\n{s = }') print(text * s) print(s * text) # TypeError: 'str' object cannot be interpreted as an integer # Метод __new__ позволили нам наследоваться от класса str и забрать все свойства и # методы, определённые в нём. Мы добавили лишь __rmul__ где делим строку # стоящую слева от знака умножить - other на отдельные слова. Далее собираем # новую строку с добавление self- строки справа от знака умножения. # При умножении str на StrPro получаем ожидаемый результат. Если же поменять # значения местами, получаем ошибку. Обычную строку можно умножить на целое # число, но не другой экземпляр.