Найти - Пользователи
Полная версия: I need help перегрузка операторов
Начало » Python для новичков » I need help перегрузка операторов
1
nubb
Может ли кто ни-будь обяснить мне на человеческом языке, что такое перегрузка операторов, обшарил весь интернет и никто толком обяснить не может, все понимаю, но ето понять не могу, в класах выполняю действия без методов перегрузки операторов и все нормально выходит , что они должны менять ети методы?
old_monty
Элементарно, Ватсон
>>> x = 5
>>> y = 3
>>> print(x+y)
8
>>> s1 = str(x)
>>> s2 = str(y)
>>> print(s1 + s2)
53
nubb
old_monty
Элементарно, Ватсон
ну то что вы написали я понимаю , а на счёт методов перегрузки операторов в класам по такой же схеме всё работает?

old_monty
nubb
ну то что вы написали я понимаю , а на счёт методов перегрузки операторов в класам по такой же схеме всё работает?
У меня в примере оператор + тоже ведь перегружен для каждого класса. Для экземпляров класса int он выполняет сложение чисел, а для экземпляров класса str он выполняет уже другое действие - конкатенацию (сцепление) строк. Правда, классы int и str являются встроенными, и перегрузку оператора + в каждом из них не требуется делать самостоятельно - эта работа уже сделана за нас. Но если вы проектируете свой собственный уникальный класс, и для этого класса вам необходима перегрузка операторов, то придется это сделать самому. Об этом лучше прочитать в книге Марка Лутца.
Rodegast
Ну вот классический пример перегрузки оператора print
class superClass(object):
     pass
print superClass()
>>> <__console__.superClass instance at 0x3944cb0>
class superClass(object):
     def __repr__(self):
         return u"Супер класс!"
print superClass()
>>> Супер класс!
py.user.next
nubb
Может ли кто ни-будь обяснить мне на человеческом языке, что такое перегрузка операторов
Перегрузка функции - это использование одного имени функции для вызова разных функций. То, какая функция будет выполняться при каждом конкретном вызове, зависит от передаваемых аргументов (сигнатуры функции).

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

Подобное делается и для других операторов своими методами.
nubb
Спасибо всем, по сути, ето вид полиморфизма я так понял!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB