Комментарии 18
В PyCharm есть аналогичный инспектор, сильно помогает. Случайно не ваш?
Поддерживает ли PyFence множественные варианты с ":type obj: :class:`project.entities.MyClass` or None" и inline-нотацию типа ":param int number: description"? У PyCharm со вторым проблемы.
Поддерживает ли PyFence множественные варианты с ":type obj: :class:`project.entities.MyClass` or None" и inline-нотацию типа ":param int number: description"? У PyCharm со вторым проблемы.
+1
Множественные поддерживаются через запятую (см. документацию, в ней примеры). Насколько я знаю, inline-нотация не является валидной с точки зрения sphinx.
В отличие от PyCharm, который делает статический анализ, PyFence делает проверки во время выполнения, безо всяких исключений.
В отличие от PyCharm, который делает статический анализ, PyFence делает проверки во время выполнения, безо всяких исключений.
0
Все-таки inline валидный sphinx-doc.org/domains.html#info-field-lists
+1
Не очень сочетается с duck-typing. Ведь без PyFence достаточно было чтобы у объекта
Конечно, на практике этим не часто пользуются, но идея именно в этом.
number
был метод .as_integer_ratio()
чтобы код работал, а с fence придётся обязательно наследоваться от float
, иначе ругнётся.Конечно, на практике этим не часто пользуются, но идея именно в этом.
0
Пример — это изначально фиговый код, в котором должна была быть проверка типа аргумента (или хотя бы
hasattr('as_integer_ratio')
). Наследоваться от float — это пожалуй, еще хуже.0
Пример — это нормальный код. Или вы серьёзно считаете, что «не-фиговый код» должен быть таким:
docs.python.org/2/glossary.html#term-eafp
В наследовании от
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
почему-то не вижу ничего плохого :-\-1
Я считаю что нормальный код должен начинаться с
if type(number) is not float:
raise ArgumentError(...)
-1
Тогда Python вам противопоказан, ИМХО.
+2
Скажите тогда то же самое разработчикам Django, например.
~/django ⭠ master $ ack-grep 'raise TypeError' . | wc -l
157
0
Ну, не так уж много на 76305 строк кода =)
Две трети из этого в contrib/gis почему-то.
Ладно, я всего лишь высказываю своё мнение. То что кто-то с ним не согласен меня устраивает.
Две трети из этого в contrib/gis почему-то.
Ладно, я всего лишь высказываю своё мнение. То что кто-то с ним не согласен меня устраивает.
0
Я же не предлагаю форсить типы аргументов повсеместно. Однако если функция неспособна работать с каким-либо типом, кроме определенного, будет человечно выдать программисту ValueError, а не заставлять лезть в ее потроха и выяснять, почему начинают сыпаться AttributeError/TypeError еще на пять фреймов ниже.
0
Можно не наследоваться от float, а добавить абстрактный класс с данным методом.
+1
В Python 3.3.3 появилась очень мощная работа с интроспекцией и сигнатурой функций Function Signature Object, пример из PEP 362:
@checktypes
def test(a:int, b:str) -> int:
return int(a * b)
+3
Я джва года такое для Objective C жду
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
PyFence: верификация типов для Python