상세 컨텐츠

본문 제목

Class와 method 활용 (4) - Class method

개발/python-심화(Advanced)

by Matthew0633 2022. 4. 3. 23:20

본문

Class Method

지난번에 객체의 함수인 instance method를 정리해보았다. 이번에는, instance method와 달리 함수 내에서 주로 Class attribute를 다루기 위한 Class method에 대해 알아보자

Why :
Class attribute 와 Class method 는 같은 클래스를 가진 객체 간 공유하기 원하는 속성과 기능이 필요할 때 활용할 수 있다.


How :
Class attribute를 정의할 때는, init method 상단에서 class attribute인 price_per_raise 를 선언할 수 있다.접근할 때는 클래스명.클래스메소드명(), 클래스명.클래스변수 로 가능하고 Class method 내에서 클래스 변수 접근은 인자인 cls를 활용하여 cls.attribute1과 같이 가능하다
Class method 를 정의할 때는, decorator를 활용하여 @classmethod 를 method 상단에 정의하고, Class 자신인 cls를 인자로 받도록 한다.

사용 시 주의 사항
Class 변수 또한 외부에서 직접적인 접근 또는 수정을 권장하지 않기 때문에, 아래의 raise_price처럼 Class attribute를 접근하거나 수정할 때는 Class method를 통해 가능하도록 설계하는 것이 better code 이다

Class 변수 또한 외부에서 직접적인 접근 또는 수정을 권장하지 않기 때문에, 아래의 raise_price처럼 Class attribute 값을 접근하거나 수정할 때는 Class method가 이를 수행하도록 설계하는 것이 better code 이다

class Car(object):

    # Class Variable
    price_per_raise = 1.0

    def __init__(self, company, details):
        self._company = company
        self._details = details

    # Instance Method
    def get_price(self):
        return 'Before Car Price -> company : {}, price : {}'.format(self._company, self._details.get('price'))

    # Instance Method
    def get_price_culc(self):
        return 'After Car Price -> company : {}, price : {}'.format(self._company, self._details.get('price') * Car.price_per_raise)

    # Class Method
    @classmethod
    def raise_price(cls, per):
        if per <= 1:
            print('Please Enter 1 or More')
            return
        cls.price_per_raise = per
        return 'Succeed! price increased.'

car1 = Car('Bmw', {'color' : 'Black', 'horsepower': 270, 'price': 5000})

print(car1.get_price()) # Before Car Price -> company : Bmw, price : 5000

# 가격 인상(Class method 미사용) - 안좋은 예
Car.price_per_raise = 1.6

# 가격 인상(Class method 사용) - 좋은 예**
Car.raise_price(1.6)

# 가격 정보(인상 후)
print(car1.get_price_culc()) # After Car Price -> company : Bmw, price : 8000.0

 

<Reference>
우리를 위한 프로그래밍 : 파이썬 중급 (인프런)

 

관련글 더보기

댓글 영역