Во-первых, обратите внимание, что ваш вопрос не имеет ничего общего с classmethod (что делает class методы в Python) - это полностью о нормальных instance методах ( Вы должны отредактировать свой заголовок ... или свой вопрос, если вы делаете подразумеваете, что это около класс методов).
Для Q в его нынешнем виде единственный способ сделать то, что вы хотите, это передать имена атрибутов, которые должен установить метод (или достаточно данных, чтобы метод мог восстановить имена) Например:
def update(self,data):
x, y, vx, vy = data
self.update_sums('x' , x)
self.update_sums('y' , y)
def update_sums(self, attname, val):
sums = 'sum_' + attname
setattr(self, sums, getattr(self, sums, 0) + val)
sums = 'sum_' + attname + '_squared'
setattr(self, sums, getattr(self, sums, 0) + val * val)
В общем, я бы не рекомендовал такой подход, поскольку он делает код более объемным, менее читаемым и незначительно менее эффективным, чем элементарный подход простого жесткого кодирования имен атрибутов. Если вспомогательный метод (здесь update_sums
) заключает в себе множество хитрой логики, которую вы действительно очень хотите избежать дублирования, возможно; но хотя устранение повторений - очень стоящая задача, для того, чтобы избежать переборщения с ней, требуется вкус и баланс; -).