정적 메쏘드

정적 메쏘드(static method)란, 인스턴스 객체를 생성하지 않고도, 혹은 인스턴스 객체를 이용 하지 않고도 클래스 이름을 이용하여 직접 호출할 수 있는 메쏘드이다.

C++, Java의 정적 메쏘드와 동일한 개념이다.


정적 메소드는 일반 메소드와는 달리 첫 인수로 self를 받지 않는다. 필요한 만큼의 인수를 선언하면 된다.

staticmethod로 등록하면 정적 메소드가 된다.



클래스 메소드

일반 메소드가 첫 인수(self)로 인스턴스 객체를 받는 것에 비해서, 클래스 메소드는 첫 인수로 "클래스 객체'를 받는다. 

메소드를 클래스 메소드로 변환하기 위해서 classmethod() 를 호출해야 한다. 

클래스 메소드 호출시 첫 번째 인수로 자동으로 해당 클래스 객체가 전달된다.

C가 첫 번째 인수로 잠재적으로 전달된다.

- 상속받은 클래스인 경우, 첫 번째 인수는 클래스 메쏘드를 호출한 클래스가 된다.



장식자

앞서 설명한 정적 메소드와 클래스 메소드는 메소드 선언 시에 그  유형이 분명히 드러나지 않는 단점이 있다. 

@staticmethod나 @classmethod 를 장식자(Decorator)라 하는데, 함수나 메소드 정의 앞 줄에 와야 한다.


장식자는 순차적으로 나타탈 수도 있다.

@A @B @C

def f():

...

혹은 여러 줄에 걸쳐 쓸 수도 있다.

@A

@B

@C

def f():

...

위의 코드는 다음 코드와 동일하다.

def f():

...

f = A(B(C(f)))




장식자가 인수를 가질 수도 있다.

@A @B @C(args)

def f():

...

이것은 다음 코드와 동일하다.

def f():

...

f = A(B(C(args)(f)))


즉, C(args)는 새로운 장식자를 리턴하며, 그 장식자의 인수로 f가 전달된다.





인수의 형 검사를 하는 decorator의 실제적인 예는 다음과 같다.


결과


'Programming > Python' 카테고리의 다른 글

생성자와 소멸자  (0) 2013.05.02
class member, instance member  (0) 2013.05.02
메쏘드의 정의와 호출  (0) 2013.05.01
class  (0) 2013.05.01
문자열 이름으로 속성 값 참조  (0) 2013.05.01
Posted by scii
: