Почему встроенные функции вместо методов корневого класса? - PullRequest
4 голосов
/ 26 апреля 2009

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

Почему Python использует abs (x) вместо x.abs?

Насколько я понимаю, все, что делает abs (), кроме вызова x.__abs__, может быть также реализовано в object.abs ()

Это исторически, потому что не всегда был корневой класс?

Ответы [ 4 ]

13 голосов
/ 26 апреля 2009

Официальный ответ от Гвидо ван Россума с дополнительным объяснением от Фредрика Лунда находится здесь: http://effbot.org/pyfaq/why-does-python-use-methods-for-some-functionality-e-g-list-index-but-functions-for-other-e-g-len-list.htm

В двух словах:

  1. abs (x) читается более естественно, чем x.abs () для большинства таких операций

  2. вы знаете, что abs (x) получает абсолютное значение, тогда как метод x.abs () может означать что-то другое в зависимости от класса x.

1 голос
/ 26 апреля 2009

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

0 голосов
/ 26 апреля 2009

Python - это язык, который поддерживает объектно-ориентированное кодирование, но он намеренно не является чисто ОО-языком. Как вы правильно заметили, классы Python, даже определенные пользователем, не всегда являются производными от одного базового класса.

Функции являются основной единицей функциональности в Python, поэтому имеет смысл, чтобы основные операции (случайный пример: str, dir, print, hash) выглядели как функции.

0 голосов
/ 26 апреля 2009

Я думаю, что это связано с тем, как использовался объектно-ориентированный способ python, потому что первым параметром вызова метода для объекта является сам объект, поэтому x.abs () имеет существенное значение abs (x)

посмотрите следующую страницу в главе 3.2.3. Python поддерживает объектно-ориентированное программирование

это должно объяснить некоторые вещи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...