Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 2, 2015 19:06:28

nubb
Зарегистрирован: 2015-11-02
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

I need help перегрузка операторов

Может ли кто ни-будь обяснить мне на человеческом языке, что такое перегрузка операторов, обшарил весь интернет и никто толком обяснить не может, все понимаю, но ето понять не могу, в класах выполняю действия без методов перегрузки операторов и все нормально выходит , что они должны менять ети методы?

Офлайн

#2 Ноя. 2, 2015 19:27:48

old_monty
Зарегистрирован: 2015-09-27
Сообщения: 238
Репутация: +  20  -
Профиль   Отправить e-mail  

I need help перегрузка операторов

Элементарно, Ватсон

>>> x = 5
>>> y = 3
>>> print(x+y)
8
>>> s1 = str(x)
>>> s2 = str(y)
>>> print(s1 + s2)
53

Офлайн

#3 Ноя. 2, 2015 20:50:52

nubb
Зарегистрирован: 2015-11-02
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

I need help перегрузка операторов

old_monty
Элементарно, Ватсон
ну то что вы написали я понимаю , а на счёт методов перегрузки операторов в класам по такой же схеме всё работает?

Офлайн

#4 Ноя. 2, 2015 21:40:47

old_monty
Зарегистрирован: 2015-09-27
Сообщения: 238
Репутация: +  20  -
Профиль   Отправить e-mail  

I need help перегрузка операторов

nubb
ну то что вы написали я понимаю , а на счёт методов перегрузки операторов в класам по такой же схеме всё работает?
У меня в примере оператор + тоже ведь перегружен для каждого класса. Для экземпляров класса int он выполняет сложение чисел, а для экземпляров класса str он выполняет уже другое действие - конкатенацию (сцепление) строк. Правда, классы int и str являются встроенными, и перегрузку оператора + в каждом из них не требуется делать самостоятельно - эта работа уже сделана за нас. Но если вы проектируете свой собственный уникальный класс, и для этого класса вам необходима перегрузка операторов, то придется это сделать самому. Об этом лучше прочитать в книге Марка Лутца.

Офлайн

#5 Ноя. 2, 2015 21:46:40

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2843
Репутация: +  186  -
Профиль   Отправить e-mail  

I need help перегрузка операторов

Ну вот классический пример перегрузки оператора print

class superClass(object):
     pass
print superClass()
>>> <__console__.superClass instance at 0x3944cb0>
class superClass(object):
     def __repr__(self):
         return u"Супер класс!"
print superClass()
>>> Супер класс!



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано Rodegast (Ноя. 2, 2015 21:47:41)

Офлайн

#6 Ноя. 3, 2015 01:09:53

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

I need help перегрузка операторов

nubb
Может ли кто ни-будь обяснить мне на человеческом языке, что такое перегрузка операторов
Перегрузка функции - это использование одного имени функции для вызова разных функций. То, какая функция будет выполняться при каждом конкретном вызове, зависит от передаваемых аргументов (сигнатуры функции).

В питоне нет перегрузки функций, есть только переопределение. Но для операций перегрузка этих операций (операция представляется как имя функции, а операнды операции - как аргументы функции) выполняется с помощью системы обратных вызовов. То есть у каждого объекта определяется свой метод для каждой операции. И когда к объекту применяется операция, то у него вызывается соответствующий метод.



Отредактировано py.user.next (Ноя. 3, 2015 01:26:00)

Офлайн

#7 Ноя. 3, 2015 01:37:00

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

I need help перегрузка операторов

nubb
С классами лишь чуть сложнее. Например у вас есть класс А и его экземпляр а ; и вам надо реализовать операцию сложения т.е. применить к вашему экземпляру класса оператор + . Для этого ваш клас должен реализовать спец. метод __add__ и/или __radd__ в зависимости от того какое дейстиве нужно реализовать - дело в том что 1+А и А+1 это, с точки зрения класса, разные вещи и за них как раз отвечают эти два метода.

Подобное делается и для других операторов своими методами.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#8 Ноя. 3, 2015 16:46:21

nubb
Зарегистрирован: 2015-11-02
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

I need help перегрузка операторов

Спасибо всем, по сути, ето вид полиморфизма я так понял!

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version