Переопределение встроенного метода
Нужно написать класс X, который наследуется от встроенного класса str. Необходимо переопределить метод join так, чтобы он работал одинаково как элементов-строк, так и для элементов-чисел.
Лучшие ответы ( 2 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Переопределение метода __format__
Здравствуйте. Может ли кто-нибудь показать пример, или дать ссылку, на пример переопределение.
Выполнить переопределение метода Equals (с одним и двумя параметрами) и метода ToString()
Задание 2. Переопределение методов класса Object Создать класс с закрытыми полями а и b, строковой.
Как посмотреть код/тело встроенного метода?
В общем есть АТД "Словарь" public class Dictionary<TKey, TValue> Я нажал F12 на нём, чтобы.
Переопределение метода
Добрый Вечер. Объясните Пожалуйста поподробнее, что обозначет: "переопределение метода" .
Переопределение метода
Не могу переопределить в производном классе метод Change, чтобы изменялось еще и грузоподъемность.
1391 / 675 / 300
Регистрация: 05.09.2021
Сообщений: 1,155
Сообщение было отмечено Lazy_Liza как решение
Решение
Lazy_Liza,
1 2 3 4 5 6 7
class X(str): def join(self, sequence): sequence = [str(item) for item in sequence] return super().join(sequence) print(X('.').join("abc")) print(X('.').join([1, 2, 3]))
a.b.c 1.2.3 ** Process exited - Return Code: 0 ** Press Enter to exit terminal
490 / 253 / 97
Регистрация: 04.11.2022
Сообщений: 378
Сообщение было отмечено Lazy_Liza как решение
Решение
anton78spb, это круто! Можно даже короче
1 2 3 4 5 6
class X(str): def join(self, seq): return super().join(map(str, seq)) print(X('.').join("abc")) print(X('.').join([1, 2, 3]))
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Переопределение метода equals
При проверки выскакивает исключение Exception in thread "main" java.lang.NullPointerException.
переопределение виртуального метода
Существует родитель-класс TEditField = class(TObject) protected procedure.
Переопределение метода ToString()
В общем есть Класс Text, у него я, пытаюсь, переопределить метод ToString(). Подскажите как можно.
Переопределение метода toString();
Доброго времени суток, объясните пожалуйста, зачем нужно переопределять метод toString() чтобы.
Переопределение метода Java
Здравствуйте. Нужна помощь в переопределение метода по задаче. Программа работает, но.
Переопределение метода toString()
Никак не могу разобраться с переопределение метода toString(), помогите, пожалуйста. Вот небольшая.
Python Переопределение родительского метода
Возможно ли в данном случае переопределить поведение метода _subconstructor из класса Child не переопределяя сам __init__ метод родительского класса?
Отслеживать
задан 12 мая 2016 в 10:27
user207200 user207200
5,166 8 8 золотых знаков 23 23 серебряных знака 41 41 бронзовый знак
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Можно. Опишите метод который хотите переопределить в наследнике.
Отслеживать
ответ дан 12 мая 2016 в 10:56
2,332 6 6 золотых знаков 21 21 серебряный знак 34 34 бронзовых знака
Спасибо. Но уже решился вопрос. Не понимал, почему не работает переопределение в дочернем классе. Оказалось, пропущена буква в имени метода. Хотел удалять вопрос, но, раз уж вы дали ответ, может, это кому-то понадобится.
Перегрузка операторов
Перегрузка операторов — один из способов реализации полиморфизма, когда мы можем задать свою реализацию какого-либо метода в своём классе.
Например, у нас есть два класса:
В данном примере класс B наследует класс A, но переопределяет метод go, поэтому он имеет мало общего с аналогичным методом класса A.
Однако в python имеются методы, которые, как правило, не вызываются напрямую, а вызываются встроенными функциями или операторами.
Например, метод __init__ перегружает конструктор класса. Конструктор — создание экземпляра класса.
__new__(cls[, . ]) — управляет созданием экземпляра. В качестве обязательного аргумента принимает класс (не путать с экземпляром). Должен возвращать экземпляр класса для его последующей его передачи методу __init__.
__init__(self[, . ]) - как уже было сказано выше, конструктор.
__del__(self) - вызывается при удалении объекта сборщиком мусора.
__repr__(self) - вызывается встроенной функцией repr; возвращает "сырые" данные, использующиеся для внутреннего представления в python.
__str__(self) - вызывается функциями str, print и format. Возвращает строковое представление объекта.
__bytes__(self) - вызывается функцией bytes при преобразовании к байтам.
__format__(self, format_spec) - используется функцией format (а также методом format у строк).
__le__(self, other) - x ≤ y вызывает x.__le__(y).
__eq__(self, other) - x == y вызывает x.__eq__(y).
__ne__(self, other) - x != y вызывает x.__ne__(y)
__gt__(self, other) - x > y вызывает x.__gt__(y).
__ge__(self, other) - x ≥ y вызывает x.__ge__(y).
__hash__(self) - получение хэш-суммы объекта, например, для добавления в словарь.
__bool__(self) - вызывается при проверке истинности. Если этот метод не определён, вызывается метод __len__ (объекты, имеющие ненулевую длину, считаются истинными).
__getattr__(self, name) - вызывается, когда атрибут экземпляра класса не найден в обычных местах (например, у экземпляра нет метода с таким названием).
__setattr__(self, name, value) - назначение атрибута.
__delattr__(self, name) - удаление атрибута (del obj.name).
__call__(self[, args. ]) - вызов экземпляра класса как функции.
__len__(self) - длина объекта.
__getitem__(self, key) - доступ по индексу (или ключу).
__setitem__(self, key, value) - назначение элемента по индексу.
__delitem__(self, key) - удаление элемента по индексу.
__iter__(self) - возвращает итератор для контейнера.
__reversed__(self) - итератор из элементов, следующих в обратном порядке.
__contains__(self, item) - проверка на принадлежность элемента контейнеру (item in self).
Перегрузка арифметических операторов
__add__(self, other) - сложение. x + y вызывает x.__add__(y).
__sub__(self, other) - вычитание (x - y).
__mul__(self, other) - умножение (x * y).
__truediv__(self, other) - деление (x / y).
__floordiv__(self, other) - целочисленное деление (x // y).
__mod__(self, other) - остаток от деления (x % y).
__divmod__(self, other) - частное и остаток (divmod(x, y)).
__pow__(self, other[, modulo]) - возведение в степень (x ** y, pow(x, y[, modulo])).
__lshift__(self, other) - битовый сдвиг влево (x
__rshift__(self, other) - битовый сдвиг вправо (x >> y).
__and__(self, other) - битовое И (x & y).
__xor__(self, other) - битовое ИСКЛЮЧАЮЩЕЕ ИЛИ (x ^ y).
__or__(self, other) - битовое ИЛИ (x | y).
__radd__(self, other),
__rsub__(self, other),
__rmul__(self, other),
__rtruediv__(self, other),
__rfloordiv__(self, other),
__rmod__(self, other),
__rdivmod__(self, other),
__rpow__(self, other),
__rlshift__(self, other),
__rrshift__(self, other),
__rand__(self, other),
__rxor__(self, other),
__ror__(self, other) - делают то же самое, что и арифметические операторы, перечисленные выше, но для аргументов, находящихся справа, и только в случае, если для левого операнда не определён соответствующий метод.
Например, операция x + y будет сначала пытаться вызвать x.__add__(y), и только в том случае, если это не получилось, будет пытаться вызвать y.__radd__(x). Аналогично для остальных методов.
__iadd__(self, other) - +=.
__isub__(self, other) - -=.
__imul__(self, other) - *=.
__itruediv__(self, other) - /=.
__ifloordiv__(self, other) - //=.
__imod__(self, other) - %=.
__ipow__(self, other[, modulo]) - **=.
__ilshift__(self, other) -
__irshift__(self, other) - >>=.
__iand__(self, other) - &=.
__ixor__(self, other) - ^=.
__ior__(self, other) - |=.
__neg__(self) - унарный -.
__pos__(self) - унарный +.
__abs__(self) - модуль (abs()).
__invert__(self) - инверсия (~).
__complex__(self) - приведение к complex.
__int__(self) - приведение к int.
__float__(self) - приведение к float.
__round__(self[, n]) - округление.
__enter__(self), __exit__(self, exc_type, exc_value, traceback) - реализация менеджеров контекста.
Рассмотрим некоторые из этих методов на примере двухмерного вектора, для которого переопределим некоторые методы:
В заключение хочу сказать, что перегрузка специальных методов - вещь хорошая, но не стоит ей слишком злоупотреблять. Перегружайте их только тогда, когда вы уверены в том, что это поможет пониманию программного кода.
Для вставки кода на Python в комментарий заключайте его в теги
- Модуль csv - чтение и запись CSV файлов
- Создаём сайт на Django, используя хорошие практики. Часть 1: создаём проект
- Онлайн-обучение Python: сравнение популярных программ
- Книги о Python
- GUI (графический интерфейс пользователя)
- Курсы Python
- Модули
- Новости мира Python
- NumPy
- Обработка данных
- Основы программирования
- Примеры программ
- Типы данных в Python
- Видео
- Python для Web
- Работа для Python-программистов
- Сделай свой вклад в развитие сайта!
- Самоучитель Python
- Карта сайта
- Отзывы на книги по Python
- Реклама на сайте
Помогите переопределить метод
Доброго времени суток, господа. Очень нужна помощь django-знатаков).
Суть проблемы: есть модель (modes.py):
class IDataTextField(models.Model): page = models.ForeignKey( IDataPage, verbose_name=_(u"Страница"), related_name="text_fields") key = models.CharField(_(u"Ключ"), max_length=250 ) value = models.TextField( _(u"Значение"), blank=True) def __unicode__(self): return u"%s = %s" % (self.key, self.value) class Meta: verbose_name = _(u"Поле текстовых данных") verbose_name_plural = _(u"Поля текстовых данных")
Есть представление для этой модели (views.py):
class IPageDelete ( DetailView ): model = IDataTextField def delete (): # переопределяем метод delete() # self.context [ "delete_record" ] = IDataTextField ( request.POST, queryset = self.objects.get ( key, value ).delete() ) return super ( IPageDelete, self ).delete() #
url.py (часть, разумеется):
url ( r'^delete/', IPageDelete.as_view(), name="delete_record" ),
Мне нужно удалить запись в таблице из полей key и value, но после нажатия на кнопку «Удалить» ничего не происходит. В чём может быть проблема?