В общем
Это действительно плохо общий совет, никакие методов аргумента не велики для объектов, которые изменяют объект таким образом, что не требует не внешних данных или для функций, которые только взаимодействуют с глобал (вы действительно должны иметь минимальную потребность в этом). В вашем случае вам необходимо изменить данный объект с помощью внешних данных, и оба объекта являются встроенным (int
).
В этом случае просто используйте функцию с двумя аргументами.
Слишком много аргументов
Теперь, вот где совет получает хорошие. Скажем, мне нужно выполнить сложную задачу с многочисленными аргументами.
def complicatedfunction(arg1, arg2, arg3, arg4, arg5, arg6):
'''This requires 6 pieces of info'''
return ((arg1 + arg2)/(arg3 * arg4)) ** (arg5 + arg6)
В этом случае, вы делаете код нечитаемым, и вы должны уменьшить количество аргументов 5 или менее.
Снижение Аргумент Считает
В этом случае, вы могли бы пройти namedtuple:
from collections import namedtuple
Numbers = namedtuple("Numbers", "numerator denominator exponent")
mynumber = Numbers(1+2, 3+4, 5+6)
def complicatedfunction(number):
return (number.numerator/number.denominator) ** (number.exponent)
Это имеет дополнительное преимущество, а затем сделать ваш код легко изменить в будущем. Скажем, мне нужно добавить еще один аргумент: я могу просто добавить это как значение в namedtuple.
from collections import namedtuple
Numbers = namedtuple("Numbers", "numerator denominator exponent add")
mynumber = Numbers(1+2, 3+4, 5+6, 2)
def complicatedfunction(number):
value = (number.numerator/number.denominator) ** (number.exponent)
return value + number.add
объектно-ориентированное проектирование
Или, если я хочу, чтобы использовать эту конкретную namedtuple для многих различных задач, я могу подкласс, а затем получить метод 0 аргументов для конкретной цели , Я могу добавить столько методов, сколько захочу, что позволяет мне использовать объект универсальным образом:
from collections import namedtuple
class Numbers(namedtuple("Numbers", "numerator denominator exponent add")):
def process(self):
value = (self.numerator/self.denominator) ** (self.exponent)
return value + self.add
mynumber = Numbers(1+2, 3+4, 5+6, 2)
0 Я думаю, что кто сказал, что это означает, что у вас не должно быть функций с 20 аргументами. Конечно, в вашем случае вполне разумно иметь один аргумент. – nbro
просто для echo @nbro, в этом случае логично предположить, что ваша функция будет иметь один аргумент. Это не делает код менее чистым. Если вы хотите сделать эту функцию меньше аргументом, вы всегда можете запросить аргумент. Если вызывающий абонент вводит номер, чтобы добавить два из них, предложив ему функцию (если прецедент допускает такие возможности) – Amit
ваш метод по-прежнему принимал аргумент 'self' ... – Fabricator