본문 바로가기

Python/Intermediate

[Python] Class(3) - Class Method, Static Method

 

Instance method, Class method, Static method

 

 

# 클래스 선언
class Car(object):
    '''
    Car Class
    Author : Me
    Date : 
    Description : Class, Static Method, Class Method
    '''

    # Class Variable(모든 인스턴스가 공유 가능)
    price_per_raise = 1.0

    def __init__(self, company, details):
        self._company = company
        self._details = details
        
    def __str__(self):
        return 'str : {} - {}'.format(self._company, self._details)

    def __repr__(self):
        return 'repr : {} - {}'.format(self._company, self._details)

    # Instance Method, self : 객체의 고유한 속성 값 사용
    def detail_info(self):
        print('Current Id : {}'.format(id(self)))
        print('Car Detail Info : {} {}'.format(self._company, self._details.get('price')))
        
    # Instance Method, self : 객체의 고유한 속성 값 사용
    def get_price(self): # getter 기능, 변수를 간접접근하게 처리.
        return 'Before Car Price -> company : {}, price : {}'.format(self._company, self._details.get('price'))

    # Instance Method
    def get_price_culc(self): # getter 기능, 변수를 간접접근하게 처리.
        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): # cls 는 class 를 의미, 인스턴스 매소드의 self 인자와 동일
        if per <= 1:
            print('Please Enter 1 or More')
            return
        cls.price_per_raise = per
        return 'Succeed! price increased.'

    # Static Method
    @staticmethod
    def is_bmw(inst):
        if inst._company == 'Bmw':
            return 'OK! This car is {}.'.format(inst._company)
        return 'Sorry. This car is not Bmw.'


# 자동차 인스턴스    
car1 = Car('Bmw', {'color' : 'Black', 'horsepower': 270, 'price': 5000})
car2 = Car('Audi', {'color' : 'Silver', 'horsepower': 300, 'price': 6000})

 

str 출력 예시

 

print('기본 정보')
print(car1)
print(car2)

--------------------------------------------[result]

기본 정보
str : Bmw - {'color': 'Black', 'horsepower': 270, 'price': 5000}  
str : Audi - {'color': 'Silver', 'horsepower': 300, 'price': 6000}

 

Instance method

 

# 전체 정보
print('전체 정보')
car1.detail_info()
car2.detail_info()
print()

--------------------------------------------[result]

전체 정보
Current Id : 2609838506840
Car Detail Info : Bmw 5000
Current Id : 2609838506896
Car Detail Info : Audi 6000

 

Class 변수 직접 접근(Class method 미사용)

 

# 가격 정보(인상 전)
print('가격 정보(인상 전)')
print(car1.get_price())
print(car2.get_price())
print()

# 가격 인상(클래스 메소드 미사용)
Car.price_per_raise = 1.2

# 가격 정보(인상 후)
print('가격 정보(인상 후)')
print(car1.get_price_culc())
print(car2.get_price_culc())
print()

--------------------------------------------[result]

가격 정보(인상 전)
Before Car Price -> company : Bmw, price : 5000
Before Car Price -> company : Audi, price : 6000

가격 정보(인상 후)
After Car Price -> company : Bmw, price : 6000.0
After Car Price -> company : Audi, price : 7200.0

 

Class method 를 이용한 Class 변수 접근

 

# 가격 인상(클래스 메소드 사용)
print('가격 인상(클래스 메소드 사용)')
Car.raise_price(1.6)
print()

# 가격 정보(인상 후 : 클래스메소드)
print('가격 정보(인상 후 : 클래스메소드)')
print(car1.get_price_culc())
print(car2.get_price_culc())
print()

--------------------------------------------[result]

가격 인상(클래스 메소드 사용)

가격 정보(인상 후 : 클래스메소드)
After Car Price -> company : Bmw, price : 8000.0
After Car Price -> company : Audi, price : 9600.0

 

Static method

 

# Bmw 여부(스테이틱 메소드 사용)
print('Bmw 여부(스테이틱 메소드 사용), 클래스.매소드로 접근')
print('Static : ', Car.is_bmw(car1))
print('Static : ', Car.is_bmw(car2))
print()

print('Bmw 여부(스테이틱 메소드 사용), 인스턴스.매소드로 접근')
print('Static : ', car1.is_bmw(car1))
print('Static : ', car2.is_bmw(car2))

--------------------------------------------[result]

Bmw 여부(스테이틱 메소드 사용), 클래스.매소드로 접근
Static :  OK! This car is Bmw.
Static :  Sorry. This car is not Bmw.

Bmw 여부(스테이틱 메소드 사용), 인스턴스.매소드로 접근
Static :  OK! This car is Bmw.
Static :  Sorry. This car is not Bmw.

 

'Python > Intermediate' 카테고리의 다른 글

[Python] NamedTuple  (0) 2021.05.21
[Python] Magic Method(2)  (0) 2021.05.21
[Python] Magic Method(1)  (0) 2021.05.21
[Python] Class(2) - self, 매직 매소드  (0) 2021.05.20
[Python] Class(1) - Basic  (0) 2021.05.20