Можно ли различить операторы + = и + в функции класса __add__? - PullRequest
0 голосов
/ 03 мая 2018

У меня есть класс, который содержит некоторые данные. Оператор + для двух объектов такого класса должен объединить данные обоих объектов и вернуть новый объект. Тем не менее, было бы гораздо лучше, если бы в случае оператора + = добавлялись данные из добавленного объекта и возвращалось само значение. Вот некоторый псевдокод, демонстрирующий, чего я хочу достичь.

class BiGData:
  def __init__(self):
    self.data=[]
  def __add__(self,x):
    if (this is just a +):
      newData=BigData()
      newData.data += self.data
      newData.data += x.data
      return newData
    else: #(this is the += case)
      self.data += x.data
      return self

Если эти два случая использования функции __add__ можно различить, код на Python будет намного лучше читать и понимать! Учтите это:

x,y=BigData(),BigData()
z = x + y # z is a new object of the BigData class, 
          # which collects all data from both x and y
          # but data in x and y are intacked
x += y    # just append data from y to x
          # data in x has been changed

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

object.__iadd__(self, other) для +=

object.__radd__(self, other) для +

см. модель данных для справки

0 голосов
/ 03 мая 2018

Нет, это невозможно.

Но если вы реализуете __iadd__(), тогда += будет использовать это вместо этого.

...