[파이썬] @classmethod 는 무엇인가?

 파이썬 메서드에는 크게 3종류가 존재한다.

1. 인스턴스 메서드 (instance method)

2. 정적 메서드 (static method)

3. 클래스 메서드 (class method)


instance method 가 가장 흔하게 쓰인다.

instance method 의 변수에 접근하기 위해서 첫번째 파라미터에 반드시 self 라는 파라미터를 갖는다.

아래에서 set_name() 이 인스턴스 메서드에 해당한다.

set_name() 은 여러 파라미터를 가질 수 있지만 첫번째는 반드시 self 를 갖는다.




클래스의 정의에서 메서드 밖에 존재하는 변수를 클래스변수(class variable)이라 하는데, 이는 해당 클래스를 사용하는 모두에게 공용으로 사용되는 변수다. 클래스변수는 클래스 안과 밖에서 '클래스명.변수명' 으로 접근할 수 있다.


인스턴스 변수

하나의 클래스로부터 여러 객체 인스턴스를 만들어 사용할 수 있다. 

클래스 변수가 하나의 클래스에 단1개만 존재하는 반면,

인스턴스 변수는 각 객체 인스턴스마다 별도로 존재한다.

클래스의 정의에서 매서드 안에서 사용되면서 'self.변수명' 처럼 사용되는 변수를 인스턴스 변수(instance variable)라고 하며,

이는 각 객체별로 서로 다른값을 갖는 변수다.

인스턴스 변수는 클래스 내부에서는 self.name 과 같이 'self.'을 사용하여 엑세스하고, 클래스 밖에서는 '객체변수.인스턴스변수' 와 같이 엑세스 한다.


 파이썬에서는 관례상, 내부적으로만 사용되는 변수나, 메서드는 그 이름 앞에 하나의 밑줄(_)를 붙인다.

만약 특정 변수명이나 메서드를    private로 만들어야한다면 두개의 밑줄(__)을 이름 앞에 붙이면 된다.


초기자 (initialize)

클래스로부터 새 객체를 생성할때마다 실행되는 특별한 메서드로 __init__() 이라는 메서드가 있는데, 이는 클래스로부터 객체를 만들때, 인스턴스 변수를 초기화하거나 객체의 초기 상태를 만들기 위한 문장들이다.



정적 메서드 @ staticmethod & 클래스 메서드 @classmethod


인스턴스 메서드가 self 를 통해 엑세스 할 수 있는 반면, 정적 메서드는 이러한 인스턴스 변수에 엑세스 할 수 없다. 

그래서 정적 메서드는 보통 객체 필드와 독립적이지만 로직상 클래스 내에 반드시 포함되는 메서드에 사용된다. 정적 메서드 앞에는 반드시 @staticmethod    로 표시한다.

클래스 메서드는 정적 메서드와 인스턴스 변수에 접근할 필요가 없는 것은 비슷하지만 클래스 변수에 접근하라 필요가 있을때 사용된다. 마찬가지로 @classmethod 로 표시한다.

클래스 변수에 접근하는 방법은 cls 라는 클래스를 의미하는 파라미터를 전달받는다.('cls.')

(인스턴스 변수에 접근하는 방법은 self 파라미터를 전달받는다.' self. ') 













댓글

이 블로그의 인기 게시물

PooPoo App Privacy Policy

Privacy Policy

YoonClock Privacy Policy