Мне очень нравится использовать строки документации в Python для указания параметров типа, когда проекты выходят за рамки определенного размера.
У меня возникли проблемы с поиском стандарта для указания того, что параметр представляет собой список определенных объектов, например. в типах Haskell я бы использовал [String] или [A].
Текущий стандарт (распознаваемый редактором PyCharm):
def stringify(listOfObjects):
"""
:type listOfObjects: list
"""
return ", ".join(map(str, listOfObjects))
Что бы я предпочел:
ВАРИАНТ 1
def stringify(listOfObjects):
"""
:type listOfObjects: list<Object>
"""
return ", ".join(map(str, listOfObjects))
ВАРИАНТ 2
def stringify(listOfObjects):
"""
:type listOfObjects: [Object]
"""
return ", ".join(map(str, listOfObjects))
Я полагаю, что это был не очень хороший пример - более подходящим вариантом использования был бы тот, где объекты в списке должны быть определенного типа.
ЛУЧШИЙ ПРИМЕР
class Food(Object):
def __init__(self, calories):
self.calories = calories
class Apple(Food):
def __init__(self):
super(self, 200)
class Person(Object):
energy = 0
def eat(foods):
"""
:type foods: [Food] # is NOT recognised by editor
"""
for food in foods:
energy += food.calories
Таким образом, помимо того факта, что я проголодался, этот пример иллюстрирует, что если вызвать его со списком объектов неправильного типа, код сломается. Отсюда важность документирования не только того, что ему нужен список, но и того, что ему нужен список продуктов питания.
СВЯЗАННЫЙ ВОПРОС Как я могу сообщить PyCharm, какого типа должен быть параметр? Обратите внимание, что я ищу более конкретный ответ, чем приведенный выше.
typing
Python 3.5). - person Noumenon   schedule 13.06.2016