首页 > 解决方案 > 如何在 Python 中更改继承方法的文档字符串?

问题描述

假设我有一个如下的类结构:

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 返回一个 numpy 数组。这意味着当divide_reward_by_x为 SubClass1 调用时,它将返回一个浮点数,但当为 SubClass2 调用它时,它将返回一个 numpy 数组。我希望 SubClass 文档能够反映这一点。换句话说,代码本身并不特定于子类,但文档应该是!

用最少的文档和代码重复来做到这一点的最 Pythonic 的方法是什么?

我认识以下解决方案,但想知道是否有更“极简”和“pythonic”的方式:

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)

标签: pythoninheritancedocstring

解决方案


推荐阅读