Python-정적, 클래스 메서드

강현구·2021년 11월 27일
0

Python

목록 보기
9/21

정적 메서드

self를 받지 않으므로 인스턴스 속성에 접근할 수 없음
인스턴스 속성, 인스턴스 메서드가 필요없을 때 사용.
메서드의 실행이 외부 상태에 영향을 끼치지 않는 순수 함수(pure function)를 만들 때 사용함.
입력값이 같으면 언제나 같은 출력값을 반환함.

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

위의 형태로 사용

파이썬 자료형 - 인스턴스 메서드, 정적 메서드

>> a = {1, 2, 3, 4}
>> a.update({5})    # 인스턴스 메서드
>> a
{1, 2, 3, 4, 5}
>> set.union({1, 2, 3, 4}, {5})    # 정적(클래스) 메서드
{1, 2, 3, 4, 5}

클래스 메서드

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

클래스 메서드는 @classmethod를 붙이고 첫번째 매개변수로 cls를 받는다.

class Person:
    count = 0    # 클래스 속성
 
    def __init__(self):
        Person.count += 1    # 인스턴스가 만들어질 때
                             # 클래스 속성 count에 1을 더함
 
    @classmethod
    def print_count(cls):
        print('{0}명 생성되었습니다.'.format(cls.count))    # cls로 클래스 속성에 접근
 
james = Person()
maria = Person()
 
Person.print_count()    # 2명 생성되었습니다.

클래스 메서드는 정적 메서드처럼 인스턴스 없이 호출할 수 있다.
대신 메서드 안에서 클래스 속성, 클래스 메서드에 접근해야 할 때 사용한다.
cls를 사용하면 메서드 안에서 현재 클래스의 인스턴스를 만들 수 있다.

profile
한걸음씩

0개의 댓글