2009-04-25 5 views
4

(FAQ이기는하지만 Google 또한 어렵습니다.)왜 루트 클래스 메서드 대신 내장 함수가 필요합니까?

왜 파이썬은 x.abs 대신 abs (x)를 사용합니까?

지금까지 내가 모든 것을 복근 (참조로) x.__abs__ 단지뿐만 아니라 object.abs() 항상 루트 클래스가되지 않았기 때문에

, 그것은 역사인가에서 구현 될 수있는 전화 외에합니까?

답변

13

귀도 반 로섬 (Guido van Rossum)에서 공식적인 답변을 설명해야 프로그래밍

, 여기 파이썬이 지원하는 장 3.2.3에서 page를 수행 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)는

  2. 당신은 복근 (X)는 반면, 절대 값을 받고 있음을 알고 대부분의 이러한 작업에 대한 x.abs()보다 더 자연스럽게 읽고 x.abs() 메서드는 x의 클래스에 따라 다른 것을 의미 할 수 있습니다.

+0

위대한 +1 +1 – ojblass

+0

두 번째 이유는 sooo가 많은 의미를 갖게 한 것입니다. – Tobias

+0

+1 : 설명서를 인용하십시오. –

1

저는 언어 설계자가 가독성과 간결한 트루프 순수 주성분을 결정하는 전형적인 예를 찾고 있다고 생각합니다.

-3

내가는 객체 지향 방법 파이썬이 방법의 첫 번째 매개 변수는 개체에서 호출하기 때문에 개체 자체가,이다, 사용 된 방법을 포함한다 생각 x.abs() (X)

모습에 필수적인 복근에 너무 객체 지향 프레드릭 룬트 (Fredrik Lundh)에서 추가 설명과 함께 몇 가지

+3

x.abs()는 * abs * (x)가 아니라 C.abs (x)입니다. 여기서 C는 x의 클래스입니다. 그것은 매우 다릅니다. abs (x)가 C와 아무 관련이없는 전역 함수를 호출합니다. – RichieHindle

0

파이썬은 객체 지향 코딩을 지원하지만 의도적으로 순수 OO 언어는 아닙니다. 파이썬 클래스, 심지어 사용자 정의 클래스도 항상 단일 기본 클래스에서 파생되지는 않는다.

함수는 파이썬의 기본 기능 단위이므로 핵심 연산 (무작위 샘플 : str, dir, print, hash)이 함수처럼 보일 수 있습니다.