본문 바로가기

Python

(7)Python: 클래스와 객체, 생성자, 상속, 오버라이딩

클래스 

> 클래스와 객체의 개념
클래스: 객체를 만들기 위한 설계도 (빵틀)
객체: 설계도로부터 만들어낸 제품 (빵)

> 클래스 만들기
class 클래스이름:
    def 메서드이름(self):
        명령블록

 


> 클래스 사용하기
인스턴스 = 클래스이름()
인스턴스.메서드()

> 파이썬에서는 자료형도 클래스다

결과

생성자

> 클래스에는 속성과 메서드
속성: 클래스를 설명하는 특징
메서드: 동작을 나타냄
인스턴스. 메서드: 인스턴스 사용

> __init__(self, parameter1, parameter2...): 인스턴스를 만들 때, 반드시 호출되는 메서드
self: 인스턴스 자기 자신을 뜻함 
 
> 인스턴스: 객체가 인스턴스를 포함하는 형태, 인스턴스란 코드 상에서 프로그램이 동작을 할 때, 이 객체가 만들어내는 시점의 객체

 

 

 

상속 

> 상속: 클래스들간에 속성이나 메서드를 물려주는 것

> 상속의 개념: 부모클래스에 있는 속성과 메서드를 자식클래스에 그대로 옮길 수 있는 것
-> 클래스들에 중복된 코드를 제거하고, 유지보수를 편하게 하기 위해서 사용

#부모 클래스
class Food:
    def __init__(self, name, price, volume):
        self.name = name
        self.price = price
        self.volume = volume
    def refund(self):
        print(f"[{self.name}]의 물품: [{self.price}]의 가격이 환불되었습니다")


#자식 클래스
class retort(food):
    pass #retort는 food에서 상속받은 매서드만 사용했으므로 pass. 그냥 정의만 하고 싶을 때

class baedal(food):
    def refund(self):  #매서드 오버라이딩
        print(f"[{self.name}]의 물품: 배달비를 제외한 [{self.price}]의 가격이 환불되었습니다")

mandu = retort("만두", 3000, 100)
mandu.refund() #부모 클래스에 있는 refund 사용

galbitang = baedal("갈비탕", 30000, 1300)
galbitang.refund() # baedal에서 재정의된 매서드 오버라이딩된 refund 사용


결과


> 생성자 오버라이딩

- 예제: 위의 배달 (baedal) 클래스에 배달비 항목도 추가하기

class baedal(food):
    # 속성 오버라이딩
    def __init__(self, name, price, volume, delivery):
        super().__init__(name, price, volume)  #super()을 통해 상속받은 부모클래스를 불러와, 부모클래스의 init함수를 호출 가능
        self.delivery = delivery #배달 속성값을 추가


    def refund(self):  #매서드 오버라이딩
        print(f"[{self.name}]의 물품: 배달비[{self.delivery}]를 제외한 [{self.price}]의 가격이 환불되었습니다")

> 클래스 변수: 인스턴스들이 모두 공유하는 변수

-> 클래스 변수를 쓸 때는 self를 쓰지 않음. 클래스 자체의 변수이므로 class.변수