Предположим, у меня есть структура классов, подобная следующей:
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)