2012-10-14 2 views
12

가능한 중복 : 나는 자기 클래스 메소드에 대한 항상 첫 번째 인수는 이유를 이해
Why do you need explicitly have the “self” argument into a Python method?항상 클래스 메소드의 첫 번째 인수로 self를 추가해야하는 이유는 무엇입니까?

이 총 의미가 있지만, 항상 사실이라면, 왜 이동 모든 메서드 정의에 대해 입력하는 번거 로움을 통해? 왜 자동으로 무언가를 만들지 않겠습니까?

명확성을 위해서입니까, 아니면 첫 번째 주장으로 자아를 전달하고 싶지 않은 상황이 있습니까?

+6

* class method *라는 용어는 사용자가 생각한다고 생각하는 것과 다른 것을 의미합니다. * 메소드 *는 클래스가 소유하는 함수로, 인스턴스에서 작동합니다. * class 메소드 *는 클래스에서 작동하는 클래스가 소유하는 메소드입니다. 당신은 후자 (관례에 따라 "cls"를 취하는)와는 달리 전자를 (관습에 따라 "자기"를) 취하는 것에 대해 이야기하고 있습니다. –

+0

매우 도움이 많은 분들께 감사드립니다. –

답변

21

암시 적이 묵시적인 것이 낫기 때문입니다. 매개 변수를 명시 적 요구 사항으로 지정하면 코드 이해, 인트로 스펙 션 및 조작을 단순화 할 수 있습니다. Python FAQ에서 더욱 확장됩니다.

또한, 당신은 클래스 메소드 (대신 첫 번째 인수로 인스턴스의 수업을)를 정의 할 수 있습니다, 당신은 정적 방법 (전혀 '첫 번째'인수를하지 않음) 정의 할 수 있습니다 :

class Foo(object): 
    def aninstancemethod(self): 
     pass 

    @classmethod 
    def aclassmethod(cls): 
     pass 

    @staticmethod 
    def astaticmethod(): 
     pass 
+8

나는 명시 적으로 암시 적보다 낫다는 주장을 할 것이다 *는 지나친 단순화이다. –

+1

@Lattyware : 아마도 더 설명해야하지만 * Explicit은 암묵적인 것보다 낫습니다 ** Python 철학의 핵심입니다 **. –

+0

매우 중요합니다. 중요한 점은 여기에 파이썬이 작동하는 방식이 더 많은 이유가 있다는 것입니다. –

12

귀도는 here을 설명했습니다. 기본적으로 메소드는 함수이며 함수는 "숨겨진"매개 변수를 허용하지 않아야합니다. 그렇지 않으면 데코레이터와 같은 고차원 기능이 현명한 방법으로 처리되지 않습니다.