35. 클래스 속성과 정적, 클래스 메서드 사용하기.

0

속성에는 클래스 속성과 인스턴스 속성이 있다
지금까지 사용한 것은 인스턴스 속성으로 (그랬어?)

class 클래스 이름:  #클래스를 정할때 
    속성 =#인스턴스의 기본 속성을 정의
    __속성 +#같은방식으로 비공개 클래스 속성을 만들 수 있다.    
#클래스 이름.클래스 속성.메서드로 접근 가능

정리하자면, 클래스내에 모든 인스턴스가 가지는 속성

  • 아바타로 예를 들자면, 아바타의 이동기능은 아바타별로
    다르지 않고, 모두가 동일한 기본 속성이므로,

인스턴스가 디폴트로 가지는 속성 같은 경우로 이해하면 될듯

우선순위는 인스턴스 속성, 클래스 속성을 먼저 찾으며
클래스 속성(디폴트)를 가지고 있는 인스턴스에
같은 이름의 속성을 부여하면 []리스트로 합쳐진다.

함수처럼 클래스, 메서드에도 설명을 달아둘 수 있고
클래스.doc 이나
클래스.메서드.doc 을 통해 각각 출력 가능!


특정 클래스의 경우, 별도의 인스턴스를 거치지 않고
클래스 내에서 입력받은 변수로만 실행이 가능한
(거의 일반함수와 동일한 기능을 가지는) 메서드를 만들 수 있는데

class 클래스이름:      #클래스이름을 가지는 클래스를 정의
    @staticmethod    #메서드 추가기능을 사용, @뒤에 붙는것은
                  #명칭 딱히 상관없이 말그대로 데코레이션인듯
    def add(a, b):
        print(a + b)        
클래스이름.add(1, 2) #클래스에서 바로 메서드 호출
output = 3         #인스턴스 필요 x 따라서 self 필요 x

위와같은 메서드를 정적(static)메서드라고 하며,
인스턴스와 관계되지 않으므로, 인스턴스와 관계없이
항상 별도로 작동하는 메서드를 만든다.


마찬가지로 인스턴스는 건드리지 않은채로
클래스 속성만 변경하면서 사용되는 메서드를 만들 수 있는데,

class 클래스이름:        #클래스 이름을 가지는 클래스를 정의
    num = 0            #클래스 속성 num = 0이 됨
    @classmethod       #클래스 메소드를 사용한다는 데코
    def print_num(cls) #self 처럼 기본 클래스 속성은 cls로 받아옴
클래스이름.print_num()  #클래스 메소드를 불러오면
output = 0             #클래스 속성을 알아서 받아옴

위와 같은 방식으로 클래스 속성에 따른
클래스 메소드를 만들어서 사용할 수 있다.

0개의 댓글

관련 채용 정보