티스토리 뷰
이 포스팅에서는 파이썬에 클래스 메소드와 스태틱 메소드의 성격을 알아보고,
두가지 메소드의 차이점을 한번 비교해본다.
---
클래스 메소드 (= @classmethod 데코레이터 함수)
- class 자체에 바인딩 된 메소드 (인스턴스에서 호출 불가)
- class 자체를 암묵적인 첫번째 파라미터로 넘겨받는다.
- 그로인해 함수 안에서 클래스 자체에서 들고있는 모든 정보에 접근이 가능하다.
- 반대로 클래스 인스턴스 정보는 접근이 불가능하다
- 메소드 내에서 class state 를 변경할 수 있으며 이는 현재 메모리에 올라가 있는 해당 클래스의 모든 인스턴스에 영향을 줄 수 있다.
그래서 이 부분은 클래스 메소드 생성 시, 매우 주의해야 함.
- 일반적으로 클래스의 factory method (cls object 를 리턴) 로 많이 사용한다. (constructor 비슷)
스태틱 메소드 (= @staticmethod 데코레이터 함수)
- class 자체에 바인딩 된 메소드
- 암묵적 첫번째 파라미터가 없다. 전부 명시적 파라미터만 입력 받아 처리 함.
- 클래스 자체 정보 접근이 불가능함.
- 스펙을 보면 사실 일반 함수와 별다를게 없는거나 마찬가지지만, 특정 클래스와 관련이 있다고 생각되기에 그냥 클래스에다가 붙여놓은 유틸성 함수라고 생각하면 된다.
- 일반적으로 클래스와 관련된 유틸리티 함수들을 만들때 사용한다.
클래스 메소드 VS 스태틱 메소드
- class 메소드는 항상 첫번째 암묵적 파라미터로 cls 를 넘겨받지만 static 메소드는 그런게 없다
- class 메소드는 클래스 정보에 접근 & 수정이 가능하지만 static method 는 그렇지 못하다.
잘 사용된 예 - Best Practice
<참고 링크>
https://www.geeksforgeeks.org/class-method-vs-static-method-python/
https://realpython.com/instance-class-and-static-methods-demystified/
'Python' 카테고리의 다른 글
[파이썬] 리터럴(literal = 숫자&문자)의 종류와 용법 (0) | 2019.04.11 |
---|---|
[Python] 인스턴스 메소드의 종류와 용법 (Instance methods): Public, Protected, Private 접근제어자 (Access Modifiers) (0) | 2019.04.08 |
[Python] Garbage collection (0) | 2019.03.30 |
Django ORM - DB Select 시, String concat 하기. (문자열 합치기) (0) | 2016.11.02 |
virtualenv 로 파이썬 가상환경 설정하기 (0) | 2016.10.30 |