1. instance method
인스턴스 메소드
가장 기본이 되는 메소드로 데코레이터 없이 선언한다.
관행적으로 메소드 맨 앞에 self라는 이름의 매개변수를 준다.
'인스턴스'의 메소드라는 것이 핵심이다.
클래스로부터 인스턴스를 생성해야 사용할 수 있고 해당 인스턴스의 속성에 접근할 수 있다.
class Counter:
def __init__(self, value = 0):
self.value = value
def increment(self, delta = 1):
self.value += delta
def decrement(self, delta = 1):
self.value -= delta
counter = Counter()
counter.value # 0
2. class method
클래스 매소드
메소드 선언부 위에 @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로 클래스 속성에 접근
@classmethod
def create(cls):
return cls()
james = Person()
maria = Person()
Person.print_count() # 2명 생성되었습니다.
kim = Person.create()
Person.print_count() # 3명 생성되었습니다.
클래스 속성이 아닌 인스턴트 속성은 보통 인스턴스 초기화할 때 __init__ 내부에 선언되고 self를 앞에 가지고 있다.
또한 파이썬에서 생성자 오버로딩을 지원하여 팩토리 메서드 작성할 때 유용하게 사용된다고 한다
class User:
def __init__(self, email, password):
self.email = email
self.password = password
@classmethod
def fromTuple(cls, tup):
return cls(tup[0], tup[1])
@classmethod
def fromDictionary(cls, dic):
return cls(dic["email"], dic["password"])
3. static method
정적 매소드
메소드 선언부 위에 @staticmethod 데코레이터를 작성해주어야 한다.
첫 번째 매개변수가 할당되지 않아, 인스턴스/클래스 속성이나 매서드 호출 및 접근이 불가능하다.
굳이 왜 정적 매소드를 이용하냐 의문이 드는데 보통 비슷한 류의 여러 유틸리티 메소드를 하나의 클래스로 묶어두고 싶을때 이용할 수 있다고 한다.
class StringUtils:
@staticmethod
def toCamelcase(text):
words = iter(text.split("_"))
return next(words) + "".join(i.title() for i in words)
@staticmethod
def toSnakecase(text):
letters = ["_" + i.lower() if i.isupper() else i for i in text]
return "".join(letters).lstrip("_")
다음은 파이썬이 기본적으로 가지고 있는 정적메소드와 인스턴스 메소드의 예시를 보여준다
a = {1,2,3,4}
a.update({5})
print(a) # {1, 2, 3, 4, 5}
print(set.union({1,2,3,4},{5})) # {1, 2, 3, 4, 5}
인스턴스의 내용을 변경해야 할 때는 update와 같이 인스턴스 메서드로 작성하면 되고,
인스턴스 내용과는 상관없이 결과만 구하면 될 때는 set.union과 같이 정적 메서드로 작성하면 된다.
참고
https://www.daleseo.com/python-class-methods-vs-static-methods/
'Programming > Python' 카테고리의 다른 글
[Python] 이터레이터 계속 반복하기 itertools cycle (0) | 2022.07.06 |
---|---|
[python] 환경변수 설정과 모듈만들기 (1) | 2022.01.26 |
[python] 매직메소드 Magin Method (0) | 2022.01.26 |
[python] 함수 (0) | 2022.01.21 |
[python] 제어문 Control Statement (0) | 2022.01.20 |