Подтвердить что ты не робот

Python: использование доктрин для классов

Можно ли использовать концепцию доктрины Python для классов, а не только для функций?

Если да, где я должен поставить доктрины - в класс docstring или в конструктор docstring?

Чтобы уточнить, я ищу что-то вроде:

class Test:
    """
    >>> a=Test(5)
    >>> a.multiply_by_2()
    10
    """
    def __init__(self, number):
        self._number=number

    def multiply_by_2(self):
        return self._number*2

Спасибо заранее,

Адам

4b9b3361

Ответ 1

Вам не хватает кода для фактического запуска доктринов в нижней части файла:

class Test:
    <snip>

if __name__ == "__main__":
    import doctest
    doctest.testmod()

Что касается места проведения тестов:

  • Если он тестирует класс в целом, я бы поместил их в класс docstring.
  • Если он тестирует конструктор, я бы поместил их в конструктор docstring.
  • Если он тестирует метод (как представляется, в этом случае), я бы поместил его в этот метод docstring.

Ответ 2

Вместо создания экземпляра объекта в каждом методе вы можете сделать что-то вроде этого:

class Test:
    def multiply_by_2(self):
        """
        >>> t.multiply_by_2()
        10
        """
        return self._number*2

if __name__ == "__main__":
    import doctest
    doctest.testmod(extraglobs={'t': Test()})

Ответ 3

Модуль doctest ищет любые docstrings в файле и выполняет любой встроенный код в нем, поэтому да, возможно, использовать doctest для классов.

Что касается того, лучше ли добавлять доктрины в класс docstring или конструктор, я думаю, это зависит от того, что именно вы документируете.

Если docstring дает общий обзор класса и как его использовать, я думаю, что лучше поместить его в класс.

Если в docstring указано, как создавать экземпляры класса, тогда он должен идти в методе __init__.

Помните, что целью доктрин является, прежде всего, самоподтверждающий примерный код в документации, поэтому IMHO аспект документации должен иметь приоритет над аспектом тестирования.

Edit:

В приведенном выше примере нет кода для выполнения doctest - запуск python test.py -v будет выполнять основной код python, который только определяет класс.

Вам нужно добавить это в конец файла:

if __name__ == "__main__":
    import doctest
    doctest.testmod()

Альтернативно Если вы используете Python 2.6 или более позднюю версию, выполните следующие действия:

python -m doctest -v test.py