Как я могу сбалансировать «Pythonic» и «удобный» в этом случае?

У меня есть «интерфейс», который будет реализован клиентским кодом:

class Runner:
    def run(self):
        pass

run обычно должен возвращать узел documenttils , но поскольку дальний далеко самый обычным случаем является простой текст, вызывающий позволяет запустить , чтобы вернуть строку, которая будет проверено с помощью type () и преобразовано в узел .

Однако, как я понимаю "Pythonic", это не "Pythonic", потому что проверка type () чего-либо не позволяет ему «быть» типом, «действуя» как one - то есть "Pythonic" код должен использовать утиную типизацию.

Я рассматривал

def run_str(self):
    pass

def run_node(self):
    return make_node(self.run_str())

, но меня это не волнует, потому что он помещает не очень интересный возвращаемый тип прямо в названии; это отвлекает.

Есть какие-то идеи, которые я пропустил? Кроме того, есть ли проблемы, с которыми я могу столкнуться в будущем с моей "плохой" системой (мне она кажется более или менее безопасной)?

5
задан Owen 18 August 2011 в 05:06
поделиться