Python 9일차

조영훈·2024년 8월 12일

Python

목록 보기
9/16
post-thumbnail

클래스 작성법 (상속 및 포함 관계)

클래스 간의 포함 관계 (has-a 관계)

클래스가 다른 클래스를 포함하는 경우로, 이를 통해 한 클래스의 인스턴스가 다른 클래스의 인스턴스를 구성 요소로 가질 수 있다.

포함 관계 예제 ✍️

class PohamHandle:
    quantity = 0  # 핸들의 회전량을 저장하는 변수

    def LeftTurn(self, q):
        self.quantity = q  # 좌회전 시 회전량을 설정
        return '좌회전'

    def RightTurn(self, q):
        self.quantity = q  # 우회전 시 회전량을 설정
        return '우회전'

    def StraightTurn(self, q):
        self.quantity = q  # 직진 시 회전량을 설정
        return '직진'

class PohamCar:
    turnShow = '정지'  # 현재 차량의 상태를 나타내는 변수

    def __init__(self, ownerName):
        self.ownerName = ownerName  # 차량 소유자의 이름
        self.handle = PohamHandle()  # PohamHandle 객체를 포함

    def TurnHandle(self, q):
        if q > 0:
            self.turnShow = self.handle.RightTurn(q)  # 우회전
        elif q < 0:
            self.turnShow = self.handle.LeftTurn(q)  # 좌회전
        else:
            self.turnShow = self.handle.StraightTurn(q)  # 직진

# 예제 실행
tom = PohamCar('tom')
tom.TurnHandle(20)  # 핸들을 20만큼 우회전
print(tom.ownerName + '의 회전량은 ' + tom.turnShow + str(tom.handle.quantity))



클래스 간의 상속 (is-a 관계)

is-a 관계는 한 클래스가 다른 클래스의 서브 클래스가 되는 관계이다. 이는 상속을 통해 구현되며, 코드의 재사용성을 높여준다.

포함 관계 예제 ✍️

class Animal:
    eat = '음식' 
    def move(self):
        print('움직이는 생물') 

class Dog(Animal):  # Animal 클래스를 상속받는 Dog 클래스
    pass  # Dog 클래스는 Animal 클래스의 모든 속성과 메서드를 그대로 사용

class Horse(Animal):  # Animal 클래스를 상속받는 Horse 클래스
    pass  # Horse 클래스도 Animal 클래스의 모든 속성과 메서드를 그대로 사용

dog1 = Dog()
print(dog1.eat)  # Dog 클래스는 Animal 클래스의 속성을 그대로 사용
print(dog1.move())  # Dog 클래스는 Animal 클래스의 메서드를 그대로 사용

horse1 = Horse()
print(horse1.eat)  # Horse 클래스도 Animal 클래스의 속성을 그대로 사용
print(horse1.move())  # Horse 클래스도 Animal 클래스의 메서드를 그대로 사용



오버라이딩과 다중 상속

Python에서는 메서드를 재정의(오버라이딩)하거나, 다중 상속을 통해 여러 클래스의 기능을 물려받을 수 있다. 이 과정에서 부모 클래스의 메서드를 호출하거나 우선순위를 정할 수 있다.

오버라이딩 예제 ✍️

class Parent:
    def printData(self):
        pass  # 부모 클래스에서 정의된 빈 메서드

class Child1(Parent):
    def printData(self):
        print('Child1 printData 수행중')  # Child1 클래스에서 메서드 재정의

class Child2(Parent):
    def printData(self):
        print('Child2 printData 수행중')  # Child2 클래스에서 메서드 재정의

c1 = Child1()
c1.printData()  # Child1의 printData 메서드 실행

c2 = Child2()
c2.printData()  # Child2의 printData 메서드 실행

다중 상속 예제 ✍️

class Tiger:
    data = "호랑이세상"  
    def Cry(self):
        print('어흥')  

class Lion:
    def Cry(self):
        print('으르렁') 

    def Hobby(self):
        print('낮잠자기')  

class Liger(Tiger, Lion):  # Tiger와 Lion 클래스를 상속받는 Liger 클래스
    pass  # 우선순위에 따라 Tiger의 Cry 메서드가 사용됨

class Liger2(Lion, Tiger):  # Lion과 Tiger 클래스를 상속받는 Liger2 클래스
    data = "라이거만의 세상"  # 새로운 속성 추가

    def Play(self):
        print('라이거만의 기능 추가')
        self.Eat()  # Tiger 클래스의 Eat 메서드 호출
        super().Hobby()  # Lion 클래스의 Hobby 메서드 호출
        print(self.data, super().data)  # 현재 클래스와 부모 클래스의 data 출력

l1 = Liger()
print(l1.data)  # Tiger 클래스의 data 속성 출력
l1.Cry()  # Tiger 클래스의 Cry 메서드 실행

l2 = Liger2()
l2.Cry()  # Lion 클래스의 Cry 메서드 실행 (우선순위에 따라)
l2.Play()  # Liger2 클래스의 Play 메서드 실행
profile
개발 꿈나무

0개의 댓글