Pull to refresh

Comments 18

В PyCharm есть аналогичный инспектор, сильно помогает. Случайно не ваш?
Поддерживает ли PyFence множественные варианты с ":type obj: :class:`project.entities.MyClass` or None" и inline-нотацию типа ":param int number: description"? У PyCharm со вторым проблемы.
Множественные поддерживаются через запятую (см. документацию, в ней примеры). Насколько я знаю, inline-нотация не является валидной с точки зрения sphinx.
В отличие от PyCharm, который делает статический анализ, PyFence делает проверки во время выполнения, безо всяких исключений.
Познавательно. Сейчас добавлю!
Не очень сочетается с duck-typing. Ведь без PyFence достаточно было чтобы у объекта number был метод .as_integer_ratio() чтобы код работал, а с fence придётся обязательно наследоваться от float, иначе ругнётся.
Конечно, на практике этим не часто пользуются, но идея именно в этом.
Пример — это изначально фиговый код, в котором должна была быть проверка типа аргумента (или хотя бы hasattr('as_integer_ratio')). Наследоваться от float — это пожалуй, еще хуже.
Пример — это нормальный код. Или вы серьёзно считаете, что «не-фиговый код» должен быть таким:
    def format(self, number):
        if hasattr(number, 'as_integer_ratio'):
            return '%i/%i' % number.as_integer_ratio()
        else:
            #?????

docs.python.org/2/glossary.html#term-eafp

В наследовании от float почему-то не вижу ничего плохого :-\
Я считаю что нормальный код должен начинаться с
if type(number) is not float:
    raise ArgumentError(...)
Тогда Python вам противопоказан, ИМХО.
Скажите тогда то же самое разработчикам Django, например.
~/django ⭠ master $ ack-grep 'raise TypeError' . | wc -l
157
Ну, не так уж много на 76305 строк кода =)

Две трети из этого в contrib/gis почему-то.

Ладно, я всего лишь высказываю своё мнение. То что кто-то с ним не согласен меня устраивает.
Я же не предлагаю форсить типы аргументов повсеместно. Однако если функция неспособна работать с каким-либо типом, кроме определенного, будет человечно выдать программисту ValueError, а не заставлять лезть в ее потроха и выяснять, почему начинают сыпаться AttributeError/TypeError еще на пять фреймов ниже.
Только вот декоратор checktypes не входит в стандартную библиотеку, увы. Его придется таскать везде с собой.
Sign up to leave a comment.

Articles