Я долгое время разрабатываю Python, и мне очень нравится динамическая природа языка, но мне интересно, выиграет ли Python от необязательной статической типизации. Была бы полезна возможность применять статическую типизацию к API библиотеки и каковы были бы недостатки этого?
Я быстро набросал декоратор, реализующий статическую проверку типов во время выполнения в pastebin, и он работает следующим образом:
# A TypeError will be thrown if the argument "string" is not a "str" and if
# the returned value is not an "int"
@typed(int, string = str)
def getStringLength(string):
return len(string)
Будет ли практично использовать такой декоратор в API-функциях библиотеки? С моей точки зрения, проверка типов не требуется во внутренней работе предметно-ориентированного модуля библиотеки, но в точках соединения между библиотекой и ее клиентом может быть полезна простая версия проектирования по контракту с применением проверки типов. Особенно как тип обязательной документации, которая четко указывает клиенту библиотеки, что он ожидает и возвращает.
Как в этом примере, где addObjectToQueue()
и isObjectProcessed()
доступны для использования клиентом, а processTheQueueAndDoAdvancedStuff()
является внутренней библиотечной функцией. Я думаю, что проверка типов может быть полезна для внешних функций, но только раздует и ограничит динамичность и полезность python, если будет использоваться во внутренних функциях.
# some_library_module.py
@typed(int, name = string)
def addObjectToQueue(name):
return random.randint() # Some object id
def processTheQueueAndDoAdvancedStuff(arg_of_library_specific_type)
# Function body here
@typed(bool, object_id = int)
def isObjectProcessed(object_id):
return True
Каковы недостатки использования этого метода? Каковы будут недостатки моей наивной реализации на pastebin?
Мне не нужны ответы, обсуждающие преобразование Python в язык со статической типизацией, но мне нужны мысли о плюсах и минусах дизайна API. (пожалуйста, переместите это наprogramrs.stackexchange.com, если вы считаете, что это не вопрос)
What would the disadvantages of using this technique be?
Потеря утиного набора текста. - person Lie Ryan   schedule 29.01.2012