Как изменить строку документации унаследованного метода в Python? - PullRequest
0 голосов
/ 15 марта 2019

Предположим, у меня есть структура классов, подобная следующей:

class BaseClass(object):
  def divide_reward_by_x(self, x, data):
    """
    Args:
      x: float
    Return:
      Reward value
    """
    return self.reward(data) // x

class SubClass1(BaseClass):
  def reward(self, data):
    """
    Args:
      data: one-dimensional numpy array
    Return:
      float of reward value
    """
    return np.sum(data)

class SubClass2(BaseClass):
  def reward(self, data):
    """
    Args:
      data: one-dimensional numpy array
    Return:
      one-dimensional numpy array of reward value
    """
    return data + 1

Обратите внимание, что reward для SubClass1 возвращает число с плавающей запятой, но reward для SubClass2 возвращает пустой массив. Это означает, что когда divide_reward_by_x вызывается для SubClass1, он возвращает float, но когда он вызывается для SubClass2, он возвращает пустой массив. Я хотел бы, чтобы документация Подкласса отразила это. Другими словами, сам код не является специфическим для подкласса, но документация должна быть!

Какой самый питонный способ сделать это с минимальной документацией и повторением кода?

Я узнаю следующее решение, но мне интересно, есть ли более «минималистский» и «питонический» способ:

class BaseClass(object):
  def _divide_reward_by_x(self, x, data):
    return self.reward(data) // x

class SubClass1(BaseClass):
  def reward(self, data):
    """
    Args:
      data: one-dimensional numpy array
    Return:
      float of reward value
    """
    return np.sum(data)

  def divide_reward_by_x(self, x, data):
    """
    Args:
      x: float
    Return:
      Float of reward value
    """
    return self._divide_reward_by_x(x, data)

class SubClass2(BaseClass):
  def reward(self, data):
    """
    Args:
      data: one-dimensional numpy array
    Return:
      one-dimensional numpy array of reward value
    """
    return data + 1

  def divide_reward_by_x(self, x, data):
    """
    Args:
      x: float
    Return:
      numpy array of reward value
    """
    return self._divide_reward_by_x(x, data)
...