아둥바둥 개발일기

[Python] 인스턴스/클래스/스태틱 메소드 본문

Python

[Python] 인스턴스/클래스/스태틱 메소드

JoyyKim 2020. 5. 10. 22:01

파이썬 클래스 내부에 정의할 수 있는 메소드는 동적 메소드와 정적 메소드로 나뉩니다.

  1. 동적(dynamic): 인스턴스 메소드
  2. 정적(static): 클래스 메소드, 스태틱 메소드

 

우선 User라는 클래스와 User클래스의 인스턴스 user1이 있다고 가정하고 설명하겠습니다.

 

인스턴스 메소드

인스턴스 메소드는 항상 첫번째 인자로 인스턴스를 받습니다.

첫번째 인자는 관용적으로 self라는 키워드를 써서 인스턴스임을 명시해줘요.

class User:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def get_name(self):
        return self.name

# 1. 인스턴스에서 바로 호출. 호출한 인스턴스가 첫번째 인자로 자동 전달.
# 추천
user1.get_name()

# 2. 클래스에서 호출 후 인스턴스를 첫번째 인자로 직접 전달.
# 비추천
User.get_name(user1)

인스턴스 메소드는 클래스에서 호출할 수도 있지만 인스턴스에서 호출하는 것이 좋습니다.

이것이 인스턴스 메소드임을 명시적으로 알릴 수 있어서 가독성이 좋아지기 때문이죠.

 

클래스 메소드

클래스 메소드는 항상 첫번째 인자로 클래스를 받습니다.

메소드를 정의할 때 @classmethod 데코레이터를 붙여야 합니다.

class User:
    num = 10
    
    @classmethod
    def get_num(cls):
        return cls.num


User.get_num()
user1.get_num()

클래스와 인스턴스 모두에서 호출할 수 있지만 인스턴스 메소드와 마찬가지로 클래스에서 호출하는 쪽이 더 가독성 좋은 코드입니다.

 

스태틱 메소드

스태틱 메소드는 인스턴스 변수, 클래스 변수를 전혀 다루지 않는 메소드입니다.

클래스 메소드와 비슷하게 @staticmethod 데코레이터를 붙여야 합니다.

 

스태틱 메소드는 인스턴스/클래스 메소드와 다르게 어떤 값도 첫번째 인자로 자동 전달되지 않습니다.

Comments