python class - staticmethod, classmethod

|

패스트캠퍼스 웹 프로그래밍 수업을 듣고 중요한 내용을 정리했습니다.
개인공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있습니다.
이 포스팅에서는 python 클래스에 대해 설명합니다.

staticmethod classmethod


staticmethod (정적 메서드)

스태틱 메서드는 클래스 내부에 정의된 일반 함수이며, 단지 클래스나 인스턴스를 통해 접근할 수 있을 뿐, 해당 클래스나 인스턴스에 영향을 주는 것은 불가능하다.

스태틱 메서드는 다양한 방식으로 인스턴스를 생성하는 클래스를 작성할 때 주로 사용된다.

__init__()초기화 함수는 하나만 존재할 수 있기때문에, 다른 생성함수를 정적 메서드로 만들어 사용할 수 있다.

import random

class Pokemon:
  def __init__(self, name, type):
    self.name = name
    self.type = type

  @staticmethod
  def electric():
    pokemons = ('피카츄', '라이츄', '파이리')
    selected_pokemon = random.choice(pokemons)
    return Pokemon(selected_pokemon, '전기')

  @staticmethod
  def water():
    pokemons = ('꼬부기', '아쿠스타', '라프라스')
    selected_pokemon = random.choice(pokemons)
    return Pokemon(selected_pokemon, '물')

classmethod (클래스 메서드)

클래스 메서드는 클래스 속성에 대해 동작하는 메서드이다. 일반적인 인스턴스 메서드와 달리 호출 주체가 클래스이며, 첫번째 인자도 클래스이다.

만약 인스턴스가 첫번째 인자로 주어지더라도 해당 인자의 클래스로 자동으로 바뀌어 전달된다.

클래스 메서드를 사용하면 부모 클래스를 상속받은 자식 클래스에서 해당 부모 클래스의 클래스 메서드를 사용할 경우 자기 자신(자식)의 클래스를 사용할 수 있다.

class Shop:
  description = 'Shop class'
  def __init__(self, name):
    self.name = name

  @classmethod
  def change_description(cls, desc):
    cls.description = desc