1 분 소요

class 변수, class method

  • class 변수
    • class 내부의 가장 첫번째 indent에서 선언할 수 있다.
    • 객체를 생성하지 않고도 Class의 name을 통해서만 접근 가능.
  • class method
    • @classmethod decorator 추가를 통해 선언이 가능하다.
    • 해당 구문이 있든 없든 객체를 생성하지 않고도 사용은 가능하나 결과값이 다르다. 아래 소스를 기준으로 @classmethod가 있을때와 없을때 차이가 존재한다.
      • @classmethod를 추가했을 경우 : first 객체가 print_pages의 cls로 넘어가지 않는다.
        1
        2
        3
        4
        
          Python Pratice book
          first page
          second page
          third page
        
      • @classmethod를 추가하지 않았을 경우 : first 객체가 print_pages의 cls 변수로 넘어가게 된다.
        1
        2
        3
        
          Python Pratice book
          second page
          third page
        
  • example 코드
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
      from operator import attrgetter
    
      class Page : 
          book_title = 'Python Pratice book' # class 변수
          def __init__(self, num, content):
              self.num = num
              self.content = content
    
          def output(self):
              return f'{self.content}'
            
          @classmethod # class method
          def print_pages(cls, *pages):
              print(cls.book_title)
              pages = list(pages)
              for page in sorted(pages, key=attrgetter('num')):
                  print(page.output())
    
    
      first = Page(1,'first page')
      second = Page(2,'second page')
      third = Page(3,'third page')
    
      Page.print_pages(first, second, third)
    

static method

  • class method와 거의 동일한 방식으로 선언이 가능하다.
    • @staticmethod를 통해 선언한다.
  • 스태틱 메서드는 단순한 함수와 같다고 보면 된다.
  • 적극적으로 사용할 이유는 그다지 많지 않다고한다.

  • example 코드
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
          class Page : 
          def __init__(self, num, content):
              self.num = num
              self.content = content
          @staticmethod
          def check_blank(page):
              return bool(page.content)
    
          first = Page(1,'')
          Page.check_blank(first)
    

태그:

카테고리:

업데이트:

댓글남기기