짧은하루

python @staticmethod 정적메서드 사용하기 본문

Language/python

python @staticmethod 정적메서드 사용하기

짧은하루 2021. 9. 29. 11:20

일반적으로, 클래스 안의 메서드를 사용할 때 인스턴스를 만들고 메서드를 호출합니다.

 

하지만, 인스턴스를 만들지 않고 바로 클래스에서 메서드를 호출하는 방법이 있습니다.

 

크게 두 가지 방법이 있는데 하나는 정적메서드, 또 다른 하나는 클래스 메서드입니다.

 

정적메서드

정적 메소드는 @staticmethod라는 데코레이터로 선언할 수 있고 self를 붙이지 않습니다.

class 클래스명:
    @staticmethod
    def 메서드(매개변수1, 매개변수2):
    	코드

예시

class Calc:
    @staticmethod
    def divide(a, b):
        print(a/b)
Clac.divide(20, 10)  # class에서 바로 호출

위와 같이 정적 메서드는 인스턴스와 상관없이 같은 값이 들어오면 같은 출력을 낼 때 사용합니다.

 

 

클래스 메서드

클래스 메서드는 @classmethod를 선언해서 사용하고 메서드의 첫번째 매개변수에 cls를 사용합니다.

class 클래스이름:
   @classmethod
   def 메서드(cls, 매개변수1, 매개변수2):
      코드

예시

class Friend:
   count = 0  # class 속성
   
   def __init__(self):
       Friend.count += 1  # 인스턴스가 생성될 때 클래스 속성 count에 1을 더함
                          # 클래스 속성은 클래스이름.속성명 으로 사용함
   @classmethod
   def print_count(cls):
       print(cls.count)  # cls로 클래스 속성에 접근함
       
yuri = Friend()
dh = Friend()

Friend.print_count()  # 2

인스턴스가 만들어 질 때마다 클래스 속성 count에 1씩 더해지는 함수를 만들었습니다.

현재 Friend로 인스턴스를 두개 만들었으므로 print_count는 2가 나옵니다.

 

클래스 메서드의 첫번째 매개변수인 cls에는 클래스가 들어옵니다.

즉 Friend가 들어온 것과 같습니다.

 

클래스 메서드는 정적 메서드처럼 인스턴스 없이 메서드를 호출 할 수 있습니다.

정적 메서드와의 차이점은 메서드 안에서 클래스 속성에 접근해야할 때 사용한다는 것입니다.

 

특히, cls를 사용하면 메서드 안에서 인스턴스를 만들 수 있습니다.

@classmothod
def create(cls):
    f = cls()  # 메서드 안에서 인스턴스 생성
    return f

cls는 클래스와 같으므로 cls()는 Friend()와 같습니다.

 


레퍼런스

반응형
Comments