인스턴스 메소드
- 데코레이터를 사용하지 않고 정의
- 인스턴스를 통해서만 호출 가능 (e.g. person = Person(); person.instance_method())
- self.func() : 인스턴스 메소드 접근
- self.value : 인스턴스 속성 접근
- self.func() or 클래스명.func() : 클래스 메소드 접근 (가독성을 위해 후자가 권장됨)
- self.value or 클래스명.value : 클래스 속성 접근 (가독성을 위해 후자가 권장됨)
정적 메소드
- 데코레이터 @staticmethod 를 사용해 정의
- 인스턴스 없이 호출 가능 (e.g. Person.static_method())
- 클래스명.func() : 클래스/정적 메소드 접근
- 클래스명.value : 클래스 속성 접근
- 자식 클래스를 통해 부모 클래스에서 상속받은 정적 메소드를 실행할 경우
클래스 메소드
- 데코레이터 @classmethod 를 사용해 정의
- 인스턴스 없이 호출 가능 (e.g. Person.class_method())
- cls.func() : 클래스/정적 메소드 접근
- cls.value : 클래스 속성 접근
- 자식 클래스를 통해 부모 클래스에서 상속받은 클래스 메소드를 실행할 경우
정적 메소드와 클래스 메소드의 차이 ( 참고 : https://nirsa.tistory.com/113 )
예를 들어, 자식 클래스 Child를 통해 부모 클래스 Parent에서 상속 정적/클래스 메소드를 각각 실행한다고 해보자.
정적 메소드 : 호출된 클래스가 무엇인지 확인할 수 없음. Child와 관련된 기능을 쓰고 싶다면 코드에 Child를 명시.
클래스 메소드 : cls가 호출된 클래스 자체를 의미. 이 경우 cls == Child 이므로 cls.func(), cls.value 로 Child와 관련된 기능 사용 가능
결론
클래스 호출과 관련이 있다면 클래스 메소드로, 정적(외부 영향을 받지 않는) 기능 구현이 목적이라면 정적 메소드를 사용하자.
'프로그래밍 언어 > Python' 카테고리의 다른 글
파이썬 any, all (0) | 2022.06.10 |
---|---|
파이썬 진법 변환 (0) | 2022.06.09 |
파이썬 문자열 (0) | 2022.06.03 |
파이썬 floor, ceil 메소드 구현 (0) | 2022.03.31 |
파이썬 클래스 상속 (0) | 2022.03.29 |