Форум сайта python.su
0
Может ли кто ни-будь обяснить мне на человеческом языке, что такое перегрузка операторов, обшарил весь интернет и никто толком обяснить не может, все понимаю, но ето понять не могу, в класах выполняю действия без методов перегрузки операторов и все нормально выходит , что они должны менять ети методы?
Офлайн
20
Элементарно, Ватсон 
>>> x = 5 >>> y = 3 >>> print(x+y) 8 >>> s1 = str(x) >>> s2 = str(y) >>> print(s1 + s2) 53
Офлайн
0
old_montyну то что вы написали я понимаю , а на счёт методов перегрузки операторов в класам по такой же схеме всё работает?
Элементарно, Ватсон
Офлайн
20
nubbУ меня в примере оператор + тоже ведь перегружен для каждого класса. Для экземпляров класса int он выполняет сложение чисел, а для экземпляров класса str он выполняет уже другое действие - конкатенацию (сцепление) строк. Правда, классы int и str являются встроенными, и перегрузку оператора + в каждом из них не требуется делать самостоятельно - эта работа уже сделана за нас. Но если вы проектируете свой собственный уникальный класс, и для этого класса вам необходима перегрузка операторов, то придется это сделать самому. Об этом лучше прочитать в книге Марка Лутца.
ну то что вы написали я понимаю , а на счёт методов перегрузки операторов в класам по такой же схеме всё работает?
Офлайн
186
Ну вот классический пример перегрузки оператора 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)
Офлайн
857
nubbПерегрузка функции - это использование одного имени функции для вызова разных функций. То, какая функция будет выполняться при каждом конкретном вызове, зависит от передаваемых аргументов (сигнатуры функции).
Может ли кто ни-будь обяснить мне на человеческом языке, что такое перегрузка операторов
Отредактировано py.user.next (Ноя. 3, 2015 01:26:00)
Офлайн
221
nubb
С классами лишь чуть сложнее. Например у вас есть класс А и его экземпляр а ; и вам надо реализовать операцию сложения т.е. применить к вашему экземпляру класса оператор + . Для этого ваш клас должен реализовать спец. метод __add__ и/или __radd__ в зависимости от того какое дейстиве нужно реализовать - дело в том что 1+А и А+1 это, с точки зрения класса, разные вещи и за них как раз отвечают эти два метода.
Подобное делается и для других операторов своими методами.
Офлайн
0
Спасибо всем, по сути, ето вид полиморфизма я так понял!
Офлайн