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 |