Добавление опций функции через kwargs (например, подробный) - PullRequest
0 голосов
/ 29 марта 2019

Я пытаюсь эффективно добавить дополнительные функции, поэтому некоторые функции класса. Довольно плохо знаком с Python, поэтому я пытаюсь выучить хорошие привычки. Я реализую это через **kwargs (к лучшему или к худшему).

Одним из таких примеров является добавление опции 'verbose', которая добавляет несколько условных операторов print во всех функциях, и здесь будет достаточно в качестве модульного теста. Существует много SO Q + As (и других учебных пособий) о **kwargs использовании для переменных, но меньше об использовании в качестве флагов выполнения.

Моя система отсчета здесь мыслит в терминах перегрузок и операторов switch, поэтому я был на грани использования оператора try, если существуют различные **kwargs.

Невозможно скопировать и вставить, вот несколько простых примеров:

class Fruit:
    def __init__(self, name):
        self.name = name

class Bowl:
    def __init__(self):
        self.contents = []

    def fill_bowl(self, *fruit, **options):
        self.fruit_list = []
        for x in options:
            if options.get(x) == 'verbose':
                verbose = 1
            else:
                verbose = 0

Здесь я бы добавил несколько if verbose == 1: print... различных атрибутов Fruit, которые я добавляю в чашу, количество содержимого и т. Д., И т. Д., Чтобы помочь с проверками работоспособности, не проходя через отладчик. глубина.

Это функционально, за исключением некоторых ошибок транскрипции при наборе этого. Я на правильном пути, или есть более интуитивный способ сделать это?

1 Ответ

1 голос
/ 29 марта 2019

Вы не должны использовать kwargs здесь Это для случаев, когда вам нужно принять неизвестные опции Здесь вы знаете, что вы хотите принять: подробный параметр. Чтобы сделать его необязательным, вы можете присвоить ему значение по умолчанию.

def fill_bowl(self, *fruit, verbose=0):

Хотя вам, вероятно, следует использовать True и False, а не 1 и 0.

(И заметьте, даже если вы действительно хотели использовать kwargs, деревья не имеют смысла перебирать такой диктовку; вы просто сделали бы if kwargs.get("verbose").)

...