Мне очень нравится использовать docstrings в 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, какой тип параметра должен быть? Обратите внимание, что я ищу более конкретный ответ, чем тот, который указан выше.