Контекстная инициализация объекта python - PullRequest
1 голос
/ 30 апреля 2020

Спасибо за ваше время. Надеюсь, что у вас все хорошо в эти странные времена.

Я работаю над классом, представляющим список операций. Эти операции получают аргументы (некоторые необязательные, некоторые обязательные) и выводят некоторые значения. Все аргументы являются ключевыми аргументами, и каждая операция выводит словарь с результатами.

Учтите, что Operation1 не принимает аргументов и выдает результат с именем 'arg1'. Учтите, что Operation2 принимает обязательный аргумент arg1 и выводит arg2.

Операции выдают ошибки, если отсутствует обязательный аргумент.

o = Operation2() # raises error because arg1 is not given

В моем Списке классов выходные данные операции вводится в качестве входных данных для следующей операции, что означает, что следующее не вызовет ошибок:

l = List([Operation1(), Operation2()])

Как я могу этого добиться? Поскольку проверка происходит в операции init, будет выдано сообщение об ошибке. Я притворяюсь, что инициализирую объект по-разному, в зависимости от того, находится он внутри List или снаружи.

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

Еще раз спасибо, что нашли время помочь мне, будьте в безопасности!

...