Имя: Пароль:
IT
Обучение
Как инкапсулировать метод объекта типа str
0 1сПупс
 
17.10.22
19:08
Добрый вечер! Речь о питоне.
Есть класс str, у него есть метод upper()
Нужно переопределить этот метод, чтобы он каждый нечетный символ делал в верхнем регистре, а каждую четную в нижнем.

Правильный ли ход моих мыслей?:

class str:
    def upper(self):
        {тут цикл по обходу всех букв и приведение их к нужным регистрам}
2 NorthWind
 
17.10.22
20:09
(0) не, так не получится. Переопределить можно только с другими параметрами.
Если нужно с теми же параметрами, тогда, мне кажется, надо унаследоваться от класса

class mystr(str):

и уже в наследнике переписать метод upper
3 1сПупс
 
17.10.22
21:44
(2) убрав все лишнее упрощаю задачу, теперь функция upper должна вконце строки прибавлять +

class Str1(str):
    def upper(self):
        return self + '+'

a = Str1('hello')
print(a.upper())

Через наследование сделал, а вот думаю как переопределить штатную.
4 Asmody
 
17.10.22
21:59
Monkeypatching в питоне возможен, но крайне не рекомендуется.

Но если очень надо, то см.пример 4: https://webdevblog.ru/monkey-patching-v-python-obyasnenie-s-primerami/
5 Курцвейл
 
17.10.22
23:20
(0) Ход мыслей неправильный. Нужно создавать свой класс и у наследника переопределять, а не заниматься всякими монкей патчингами и прочей ересью.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn