2014-02-15 2 views
1

파이썬은 __lt__, __getattr__ 등과 같이 객체에 사용자 정의 기능을 구현하는 많은 방법을 지원합니다. __len____instancecheck__과 같은 특정 내장 함수의 수행 방식에 영향을 미치는 마법 방법이 있습니다. 그러나 파이썬의 모든 내장 함수에 대한 마법 방법이 있습니까?파이썬에는 모든 내장 함수에 대한 마법 메서드가 있습니까?

예를 들어 any 함수가 특정 클래스에서 수행하는 방식을 변경하려면 해당 클래스에 __any__ 마법 메서드를 지정할 수 있습니까? 이것이 옵션이 아니라면, 특별히 그 클래스에 적용되는 방법에 영향을 줄 수 있습니까? any? (나는 any이 반복자에서 항목 I가 __iter__을 정의 할 수 있습니다를받는 방법에 대한 특별한 기능을 원한다면 실현,하지만 그건 내가 할 찾고 있어요 게 아니에요) any은 그냥 내 욕망 사용자 정의 기능을 구현하는

주 예를 들어, 나는 명시 적으로 any에 대한 사용자 지정 기능을 정의하고 싶지 않습니다.

+1

아니, 후킹가 이해되지 않는다 내장 함수 많이 있습니다. 예를 들어'chr()'또는'id()'. –

+0

@MartijnPieters,'chr'에 적절한 의미를 갖습니다. 만약 여러분이 자신의 숫자 타입을 만들고 있다면, int를 사용할 수있는 곳이면 어디에서든지 사용되기를 원합니다. –

+0

@MikeGraham 사실 그것은 그 목적에 훨씬 더 적합한'__int__'을 정의함으로써 이루어질 수 있습니다. – delnan

답변

4

특수한 방법으로 개념에 연결할 수 있습니다. 많은 기능이나 다른 것들이 내장되어 있지 않습니다.

__len__은 컨테이너 길이이며 특별히 len() 함수의 후크가 아닙니다. len() 함수가 해당 기능에 대해 표시되는 API 인 경우가 발생합니다.

any()반복 가능, 인수를 기대하며 여기에서 찾고있는 개념은 Iterator type methods입니다. 구부리는 기능이 아니라 그 개념입니다.

default type abstract base classes을 조사하여 파이썬 유형이 구현하는 방법을 확인할 수 있습니다. 여기에서는 많은 특수 메소드가 함께 읽을 수있는 개요로 그룹화됩니다.

+0

"* any()는 * iterator * 인자를 기대한다"No,'any'는 * iterable * 인자를 기대한다. –

+0

@MikeGraham : 실제로 iter()가 호출되므로 iterable이면 충분합니다. 웬일인지 나는 아직도 교환 할 수있는 용어를 사용한다. 그러나 내가 더 많이주의해야하는 차이가있다. –

1

아니요, 많은 경우에만 실용성이 요구됩니다.

은 (특히 이전 __any__, it has been discussed하지만, 궁극적으로는 고려되지 않았다 필요합니다.)

관련 문제