Как задокументировать тип утки?

У меня слишком много документации, так как каждый раз, когда я сталкиваюсь со сложным типом утки, мне нужно каким-то образом сказать« этот тип утки », но вместо этого я попадаю в ловушку бесконечный цикл «ваша функция требует этого от этого ввода, но не документирует его», а затем документирует его. Это приводит к раздутой, повторяющейся документации, такой как следующее:

def Foo(arg):
    """
    Args:
      arg: An object that supports X functionality, and Y functionality,
        and can be passed to Z other functionality.
    """
    # Insert code here.

def Bar(arg):
    """
    Args:
      arg: An object that supports X functionality, and Y functionality,
        and can be passed to Z other functionality.
    """
    # Insert code here.

И так далее, и так далее, для Baz , Qux и другие функции. Мне нужен более короткий способ записи « arg is a (type of object)».

Для некоторой утки типов, это так же просто, как «объект, подобный dict»: мы знаем, что мы ожидаем от dict, а значит, мы знаем, что передать. A dict или что-то, что может его имитировать.

Я чувствую, что у C ++ такая же проблема с temp латинские типы. У Haskell он есть, но для его документирования можно использовать определение класса типа. (Примечание: классы Haskell! = Классы в Java / C ++ / Python / и т. Д.) (Примечание: я действительно не программирую на Haskell, так что простите меня, если это дрянной пример.)

Стоит ли мне использовать традиционный объектно-ориентированный подход. route, и просто напишите базовый класс и скажите в документации «что-нибудь вроде этого базового класса»? Код не будет принудительно наследовать от базового класса (поскольку нет требования для объекта, который должен быть производным от него), а базовый класс не добавляет никакого значения, кроме как для документирования свойств интерфейса, по сути.

С другой стороны, я программирую на Python и пытаюсь программировать в рамках языковых идиом. (Как обычно бывает больно.) Базовые классы хороши для наследования функциональности, но когда ваш базовый класс полностью абстрактный, кажется, что он не добавляет ценности в языке с утиным типом.


РЕДАКТИРОВАТЬ : К ответам: я знаю, что такое утиная печать (это должно быть очевидно из сообщения). Где я задокументирую это вопрос, особенно. когда не существует класса, к которому можно было бы прикрепить документацию.

14
задан Thanatos 9 November 2011 в 03:30
поделиться