Python 기초 14 - 오버라이딩, 클래스변수

do yeon kim·2022년 6월 1일
0

Python(기초)_fastcampus

목록 보기
14/21

오버라이딩

양념치킨을 주문하면 맵기를 조절할수있다.
양념치킨의 속성에 맵기라는 것을 추가해보자
생성자 자체를 오버라이딩 해보자!!!

#부모클래스
class Chicken:
	def __init__(self, price, chicken):
    	self.price = price
        self.chicken = chicken
    
    def fried(self):
    	print(f"{self.chicken}을 튀깁니다."

#자식클래스
class 양념chicken(Chicken):
	def __init__(self, price, chicken):
		super().__init__(price, chicken)
        self.spicelevel = (level1, level2, level3) #오버라이딩
        
    def fried(self):
    	print(f"{self.chicken}을 양념에 버물입니다." #오버라이딩
	
    def addspice(self,number):
    	print(f"{self.spicelevel[number]}레벨을 더했습니다." 
    
    
양념치킨 = 양념chicken(12000, "닭")
양념치킨.addspice(1)

chicken클래스에서 __init__()메서드와 fried()메서드를
양념chicken클래스에서 오버라이딩해서 재정의했다.

__init__()의 경우 super()키워드를 사용해서 부모클래스를 호출할수 있다.


클래스 변수

인스턴스들이 모두 공유하는 변수이다

클래스 변수는 클래스 이름으로 접근한다.


만약 치킨 집에 100마리까지만 판다면 100마리를 제한으로 인스턴스가 만들어 질대마다 1씩 줄인다.
#부모클래스
class Chicken:
	chicken_limit = 100
    def __init__(self, price, chicken):
    	self.price = price
        self.chicken = chicken
    	Chicken -= 1 #클래스변수
    
    def fried(self):
    	print(f"{self.chicken}을 튀깁니다."

#자식클래스
class 양념chicken(Chicken):
	def __init__(self, price, chicken):
		super().__init__(price chicken)
        self.spicelevel = (level1, level2, level3)
        
    def fried(self):
    	print(f"{self.chicken}을 양념에 버무립니다." #오버라이딩
	
    def addspice(self,number):
    	print(f"{self.spicelevel[number]}레벨을 더했습니다."
    

chicken_limit = 100은 클래스변수로 객체가 생성될 때마다 변하게 된다.

상속과 클래스변수를 이용한 예제코드


class Chicken:
    chicken_limit = 100
    income = 0
    def __init__(self, price, chicken_order):
        self.price = price
        self.chicken_order = chicken_order
        Chicken.chicken_limit -= chicken_order
        Chicken.income += price*chicken_order
    
    def fried(self):
        print(f"{self.chicken_order}를 튀깁니다.")

class Yangnyeomchicken(Chicken):
    def __init__(self, price,chicken_order):
        super().__init__(price, chicken_order)
        self.spicyLevel = (0,1,2,3,4)
    
    def fried(self, specy_Level):
        print(f"{self.chicken_order}를 튀깁니다.")
        print(f"{self.chicken_order}{self.spicyLevel[specy_Level]}맵기의 양념으로 버무립니다.")

class Garlicchicken(Chicken):
    def __init__(self, price, chicken_order):
        super().__init__(price, chicken_order)

    def fried(self):
        print(f"{self.chicken_order}를 튀김니다.")   
        print(f"{self.chicken_order}를 마늘소스에 버무립니다.")

fried = Chicken(10000, 3)
fried.fried()
print(fried.chicken_limit)

ychicken = Yangnyeomchicken(10000, 3)
ychicken.fried(1)
print(ychicken.chicken_limit)

gchicken = Garlicchicken(12000, 2)
gchicken.fried()
print(gchicken.chicken_limit)

print(Chicken.income)

클래스 변수를 이용해서 치킨을 판매했을 경우 수익을 계산하는 코드를 짜보았다.


https://fastcampus.co.kr/dev_online_pyweb

0개의 댓글