Вы можете вызвать функцию с динамическими аргументами, используя синтаксис, такой как func(**kwargs)
, где kwargs
- словарь сопоставлений имени / значения для именованных аргументов.
Я также переименовал глобальный список frequency
в frequencies
, поскольку строка if frequency in frequency
не имела большого смысла.
class geoProcessClass():
def __init__(self, geoTaskHandler, startDate, frequency, frequencyMultiple=1, *args):
self.interval = self.determineTimeDelta(frequency, frequencyMultiple)
def determineTimeDelta(self, frequency, frequencyMultiple):
frequencies = ["hours", "days", "weeks"]
if frequency in frequencies:
kwargs = {frequency: frequencyMultiple}
else:
kwargs = {"days": 1}
return datetime.timedelta(**kwargs)
Что бы это ни стоило, в стилистическом отношении его обычно осуждают, чтобы он молча исправлял ошибки, совершаемые вызывающим абонентом. Если вызывающий абонент вызывает вас с неверными аргументами, вам, вероятно, следует немедленно и громко провалиться, а не пытаться продолжать пыхтеть. Я бы рекомендовал против этого заявления if
.
Для получения дополнительной информации о списках аргументов переменной длины и ключевых слов см .: