Перегрузка функций в Python: отсутствует

Как говорится:

http://web.archive.org/web/20090624083829/http://mail.python.org/pipermail/python-list/2003-May/206149.html

Перегрузка функции отсутствует в Python.

Насколько мне кажется, это большой недостаток, так как он также является языком OO. Первоначально я обнаружил, что трудно различать типы аргументов было сложно, но динамическая природа Python упрощала (например, список, кортежи, строки очень похожи).

Однако подсчет количества переданных аргументов, а затем выполнение задания, похоже на перебор.

  • Никаких веб-процессов, запускающих Django в heroku
  • «OSError: Операция не разрешена» при установке Scrapy в OSX 10.11 (El Capitan) (защита целостности системы)
  • Оформление метода класса после @property
  • ошибка numpy и pandas timedelta
  • Запрос на фляжку и тип приложения / json
  • Переключение с SQLite на MySQL с помощью Flask SQLAlchemy
  • Использование функции map () с аргументами ключевого слова
  • Мыло Python с использованием soaplib (сервера) и пены (клиент)
  • 5 Solutions collect form web for “Перегрузка функций в Python: отсутствует”

    Как можно заметить, аргументы ключевых слов со значениями по умолчанию могут пройти долгий путь.

    Я также заявляю, что, на мой взгляд, это противоречит духу Python, чтобы волноваться о том, какие типы передаются в методы. В Python я считаю, что более привычно использовать утиную типизацию – спрашивать, что может сделать объект, а не то, что это такое.

    Таким образом, если ваш метод может принять строку или кортеж, вы можете сделать что-то вроде этого:

    def print_names(names): """Takes a space-delimited string or an iterable""" try: for name in names.split(): # string case print name except AttributeError: for name in names: print name 

    Тогда вы можете сделать одно из следующих:

     print_names("Ryan Billy") print_names(("Ryan", "Billy")) 

    Хотя такой API иногда указывает на проблему с дизайном.

    Теперь, если вы не пытаетесь написать код на C ++ с использованием синтаксиса Python, для чего вам потребуется перегрузка?

    Я думаю, что это совершенно противоположно, перегрузка необходима только для того, чтобы заставить строго типизированные языки больше походить на Python. В Python у вас есть аргумент ключевого слова, у вас есть *args и **kwargs .

    См. Например: что такое чистый, pythonic способ иметь несколько конструкторов в Python?

    вам не нужна перегрузка функций, поскольку у вас есть аргументы * args и ** kwargs.

    Дело в том, что перегрузка функций основана на идее, что передача разных типов выполняется другим кодом. Если у вас динамически типизированный язык, такой как python, вы не должны различать по типу, но вам нужно иметь дело с интерфейсами и их соблюдением кода, который вы пишете.

    Например, если у вас есть код, который может обрабатывать целое число или список целых чисел, вы можете попробовать выполнить итерацию на нем, и если вы не в состоянии, то вы предполагаете, что это целое число и идти вперед. Конечно, это может быть float, но, насколько это касается поведения, если float и int кажутся одинаковыми, тогда они могут быть взаимозаменяемы.

    Часто вы видите, что в предположении используются аргументы ключевого слова с значениями по умолчанию. Посмотрите на это.

    Вы можете передать изменяемый тип данных контейнера в функцию, он может содержать все, что вы хотите.

    Если вам нужна другая функциональность, назовите функции по-разному, или если U нужен один и тот же интерфейс, просто напишите функцию (или метод) интерфейса, которая вызывает функции соответствующим образом на основе полученных данных.

    Мне потребовалось время, чтобы приспособиться к этому приходу с Java, но это действительно не «большой гандикап»,

    Python - лучший язык программирования в мире.