Big Ben
Big Ben's Log
Big Ben
전체 방문자
오늘
어제
  • 전체 글 (80)
    • 파이썬 (23)
      • 파이썬 기초 (5)
      • 클래스 (6)
      • 자료구조 (4)
      • Tensorflow (3)
      • PyTorch (2)
      • konlpy (1)
      • anaconda (1)
    • 머신러닝 (3)
      • 선형회귀 (1)
      • Tree 기반 (1)
    • 딥러닝 (6)
      • NLP (2)
      • VISION (2)
      • TABULAR (0)
      • 딥러닝 서버 구축 (2)
    • 그래프 이론 (1)
      • 그래프마이닝 (1)
      • GNN (0)
    • 강화학습 (3)
      • 강화학습 기본 (3)
    • 인공지능 (5)
    • 추천시스템 (2)
      • 추천시스템 기초 (2)
    • Competitions (1)
    • 빅데이터 (8)
      • 하둡 (3)
      • 스파크 (4)
      • 클라우드 (1)
    • SQL (7)
      • MariaDB (2)
    • 논문 리뷰 (2)
    • 대학원 (0)
      • 데이터 사이언스 (0)
      • 경제학 (0)
    • 선형대수학 (7)
      • 선형대수 ICE BREAKING (1)
      • 벡터 (5)
      • 고윳값 (1)
    • 개인프로젝트 (0)
      • 포트폴리오 대시보드 + AI기반 주식 자동매매 (0)
    • 재테크 (1)
    • 자동차 (0)
    • 알고리즘 (11)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • TensorFlow
  • pytorch
  • 알고리즘
  • 선형대수
  • 코테
  • 파이썬기초
  • MariaDB
  • 머신러닝
  • class
  • mysql
  • 빅데이터
  • AI
  • 객체지향
  • PYTHON
  • 프로그래머스
  • 선형대수학
  • 백준
  • 프로그래밍
  • 파이썬
  • 자료구조
  • 데이터
  • 딥러닝
  • 객체
  • 데이터사이언스
  • 인공지능
  • 코딩테스트
  • Baekjoon
  • 하둡
  • sql
  • 데이터베이스

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Big Ben

Big Ben's Log

파이썬/클래스

[python] 클래스 메서드(class method)와 정적 메서드(static method)

2023. 3. 8. 10:30
반응형

1. 클래스 메서드 (Class Method)

아래의 코드처럼 일반적으로 클래스 내에서 함수를 정의하고 사용하는 메서드는 객체에 소속되는 인스턴스 메서드이다.

class Human:
    def __init__(self, age, name):
        self.age = age
        self.name = name
    
    def intro(self):
        print(str(self.age) + "살 " + self.name +  "입니다.")
        

park = Human(13, "박진명")
park.intro()

Human 클래스의 intro 메서드는 첫 번째 인수 self를 받아 이 객체에 대한 작업을 수행한다.

따라서, park 객체에 대해 호출되며, 해당 인스턴스의 나이와 이름을 조사하여 출력한다.

 

즉 park.intro() 메서드에서 읽는 self.age는 park의 나이가 된다.

 

이에 비해 클래스 메서드는 특정 객체에 대한 작업을 처리하는 것이 아니라, 클래스 전체가 공유한다.

함수 앞에 @classmethod 데코레이터를 붙이고 첫번째 인수로 클래스에 해당하는 cls인수를 받으면 클래스 메서드를 만들 수 있다.

 

다음은 김상형 저자의 파이썬 정복에서 발췌한 예제 코드이다.

# 클래스 정의
class Car:
    count = 0
    
    def __init__(self, name):
        self.name = name
        Car.count += 1

    # 클래스 메서드 생성
    @classmethod
    def outcount(cls):
        print('지금까지 총 {}대의 자동차 인스턴스가 생성되었습니다'.format(cls.count))
        
# 자동차 인스턴스 1개 생성
genesis = Car('제네시스')
print(Car.outcount()) # 여태까지 총 1대 생성

# 자동차 인스턴스 추가 생성
ionic = Car('아이오닉')
print(Car.outcount()) # 여태까지 총 2대 생성

eclass = Car('E클래스')
print(Car.outcount()) # 여태까지 총 3대 생성 ...

위처럼 인스턴스의 메서드 genesis.outcount(), ionic.outcount() 등을 사용하는 것이 아닌, Car 클래스의 메서드인 outcount를 사용하는 방식을 채택한다.

 

클래스 선언문에서 초기화한 count 변수는 Car 클래스 소속이다. 특정 객체에 소속되지 않으며 이 클래스로부터 생성되는 모든 객체가 공유한다.

 

최초 선언될 때 0으로 초기화하고 `__init__`에서 차를 한대 생성할 때마다 1씩 증가한다.

 

2. 정적 메서드 (Static Method)

정적 메서드는 클래스에 포함되는 단순한 유틸리티 메서드이다.

특정 객체에 소속되지도 않고, 클래스와 관련된 동작을 하는 것도 아니어서 따로 self 또는 cls와 같은 인수를 받지 않는다.

정의할 때 @staticmethod 데코레이터를 붙여주면 된다.

 

class Car:
    @staticmethod
    def hello():
        print('오늘도 안전운전!!!')
    
    count = 0 # class variable
    
    # 생성자 
    def __init__(self, name):
        self.name = name
        Car.count += 1
    
    @classmethod
    def outcount(cls):
        print(cls.count)
        
Car.hello()  # 출력물: 오늘도 안전운전!!!

i30 = Car('i30')
i30.hello()  # 출력물: 오늘도 안전운전!!!

위처럼 클래스나 객체와 직접적인 연관이 없고 단순히 클래스에 소속되어 있을 뿐이다.

그래서 객체가 전혀 없어도 호출할 수 있으며, 객체와 상관없는 아주 일반적인 동작만 가능하다.

 

클래스에 포함되어 있으므로 호출할 때는 클래스명.메서드() 식으로 호출된다.

 

모든 객체가 빈번히 호출하는 공ㅇ통적인 도우미 함수를 클래스 안에 포함시켜 두고자 할 때 정적 메서드를 사용한다.

반응형
저작자표시 (새창열림)

'파이썬 > 클래스' 카테고리의 다른 글

[python] 파이썬 class의 __call__ 함수 (매직메소드)  (0) 2023.03.12
[python] 파이썬 Class 내 self.<variable name>에서 self 키워드는 어떤 역할을 할까?  (0) 2023.03.05
파이썬과 객체지향 (python and class) 3 - 생성자(__init__, initializer)  (0) 2023.01.02
파이썬과 객체지향 (python and class) 2  (0) 2023.01.02
파이썬과 객체지향 (python and class) 1  (0) 2023.01.02
    '파이썬/클래스' 카테고리의 다른 글
    • [python] 파이썬 class의 __call__ 함수 (매직메소드)
    • [python] 파이썬 Class 내 self.<variable name>에서 self 키워드는 어떤 역할을 할까?
    • 파이썬과 객체지향 (python and class) 3 - 생성자(__init__, initializer)
    • 파이썬과 객체지향 (python and class) 2
    Big Ben
    Big Ben
    Data Scientist

    티스토리툴바