Python Basic 18 | 클래스

devheyrin·2022년 1월 10일
0

python basic

목록 보기
18/19

정적 메서드 사용하기

정적 메서드는 인스턴스를 통하지 않고 클래스에서 바로 호출할 수 있다.

매개변수로 self를 지정하지 않는다.

메서드의 실행이 외부 상태에 영향을 끼치지 않는 순수함수 를 만들때 사용한다.

순수함수는 부수효과가 없고 입력값이 같으면 언제나 같은 출력값을 반환한다.

즉, 정적 메서드는 인스턴스의 상태를 변화시키지 않는 메서드를 만들 때 사용한다.

class Calc:
    @staticmethod
    def add(a,b):
        print(a + b)

    @staticmethod
    def mul(a,b):
        print(a * b)

# 인스턴스 생성 없이 바로 메서드 호출 
Calc.add(10,20)
Calc.mul(10,20)

파이썬 자료형의 인스턴스 메서드/정적 메서드

인스턴스의 내용을 변경해야 할 때는 인스턴스 메소드

인스턴스 내용과 관계없이 결과만 구하면 될 때는 정적 메소드로 작성한다.

a = {1, 2, 3, 4}
a.update({5})  # 인스턴스 메소드
set.union({1, 2, 3, 4}, {5})  # 정적 메소드

클래스 메서드 사용하기

인스턴스 없이 호출할 수 있는 것은 정적 메서드와 같지만,

클래스 메서드는 메서드 안에서 클래스 속성, 클래스 메서드에 접근해야할 때 사용한다.

class Person:
    count = 0  # 클래스 속성

    def __init__(self):
        Person.count += 1  # 인스턴스가 만들어질 때
        # 클래스 속성 count에 1을 더함

    @classmethod
    def print_count(cls):  # 매개변수로 cls(현재 클래스)가 들어옴
        print('{0}명 생성되었습니다.'.format(cls.count))  # cls로 클래스 속성에 접근

james = Person()
maria = Person()

Person.print_count()  # 2명 생성되었습니다.

cls 를 사용하면 메서드 안에서 현재 클래스의 인스턴스를 만들 수도 있다.

@classmethod
def create(cls):
    p = cls()
    return p

추상 클래스 사용하기

추상 클래스란 메서드의 목록만 가진 클래스이며, 상속받는 클래스에서 메서드 구현을 강제하기 위해 사용한다.

  • import 로 abc(abstract base class) 모듈을 가져온다.
  • 클래스의 괄호 안에 metaclass=ABCMeta 를 지정한다.
  • 메서드 위에 @abstractmethod 를 붙여서 추상메소드로 지정한다.
from abc import *

class StudentBase(metaclass=ABCMeta):
    @abstractmethod
    def study(self):
        pass  # 추상 클래스는 인스턴스를 만들 수 없으므로 빈 메서드로 만든다. 

    @abstractmethod
    def go_to_school(self):
        pass

class Student(StudentBase):
    def study(self):
        print('공부하기')

    def go_to_school(self):
        print('학교가기')

james = Student()
james.study()
james.go_to_school()
profile
개발자 헤이린 🔜 프로덕트 매니저로 나아가는 중!

0개의 댓글