ch0nny_log

[빅데이터분석] Python_28. 파이썬 상속 본문

빅데이터 분석(with 아이티윌)/python

[빅데이터분석] Python_28. 파이썬 상속

chonny 2024. 8. 13. 09:44
복습1. 아래의 리스트에서 문자 b를 출력하시오. 

k =['a','b','c','d']
k =['a','b','c','d']

k[1]​
복습 2. 위의 리스트를 품고 있는 함수를 다음과 같이 만들고 실행하시오. 
def   search_k(num):
    k = [ 'a', 'b', 'c', 'd' ]
    result  =  k[num]
    return  result 

print ( search_k(1) )​
복습 3. 다음과 같이 search_k 에 자리번호를 k 리스트에 없는 번호를 넣었을때 에러가 나지 않고 해당 자리번호는 없습니다. 라는 메세지를 출력하도록 예외처리를 하시오 !
def search_k(num):
    k = ['a', 'b', 'c', 'd']
    try:
        # 리스트 인덱스에 접근을 시도
        result = k[num]
        return result
    except IndexError:
        # IndexError가 발생할 경우 이 블록이 실행됩니다.
        return "해당 자리번호는 없습니다."

# 테스트
print(search_k(1))  # 유효한 인덱스, 결과: 'b'
print(search_k(5))  # 유효하지 않은 인덱스, 결과: '해당 자리번호는 없습니다.'​

 


 

문제. cat이라는 클래스를 생성하는데 animal 클래스를 상속받아 생성하고 meow라는 메소드를 생성하고 실행하면 buddy가 야용하고 있습니다. 가 출력되게 하시오.
class Animal:  # 부모 클래스
    def __init__(self, name):  # 생성자 메소드
        self.name = name  # 인스턴스 변수

    def eat(self):  # 인스턴스 메소드
        print(f'{self.name} is eating delicious food')

class Dog(Animal):  # Dog 클래스가 Animal 클래스를 상속받음
    def bark(self):
        print(f'{self.name} is barking.')

class Cat(Animal):
    def meow(self):
         print(f'{self.name} 가 야옹하고 있습니다.')


# Dog 클래스의 인스턴스를 생성하고 메소드 호출
dog = Dog('Buddy')
dog.eat()
dog.bark()

cat = Cat('Buddy')
cat.eat()
cat.meow()​

class Animal:
    def __init__(self, name):
        self.name = name

    def eat(self):
        print(f"{self.name}이(가) 먹고 있습니다.")

class Dog(Animal):
    def eat(self):
        print(f"{self.name}이(가) 개 사료를 먹고 있습니다.")

    def bark(self):
        print(f"{self.name}이(가) 짖고 있습니다.")

class Cat(Animal):
    def eat(self):
        print(f"{self.name}이(가) 고양이 사료를 먹고 있습니다.")

    def meow(self):
        print(f"{self.name}이(가) 야옹하고 있습니다.")

def feed_animal(animal):
    animal.eat()

# 인스턴스 생성
dog = Dog("버디")
cat = Cat("위스커스")

# feed_animal 함수는 다형성을 활용하여 서로 다른 행동을 수행함
feed_animal(dog)  # 출력: 버디이(가) 개 사료를 먹고 있습니다.
feed_animal(cat)  # 출력: 위스커스이(가) 고양이 사료를 먹고 있습니다.

 

class Animal:
    def sound(self):
        pass  # 기본 클래스는 아무 일도 하지 않습니다.

class Dog(Animal):
    def sound(self):
        print("멍멍")

class Cat(Animal):
    def sound(self):
        print("야옹")

class Bird(Animal):
    def sound(self):
        print("짹짹")

def make_sound(animal):
    animal.sound()

# 각 동물 클래스의 인스턴스를 생성합니다.
dog = Dog()
cat = Cat()
bird = Bird()

# make_sound 함수를 사용하여 각 동물의 소리를 출력합니다.
make_sound(dog)   # 출력: 멍멍
make_sound(cat)   # 출력: 야옹
make_sound(bird)  # 출력: 짹짹

class TeamLead:
    def multiply(self, x, y):
        return x * y
    
    def divide(self, x, y):
        return x / y 

class Senior1(TeamLead):
    def add(self, x, y):
        return x + y

class Senior2(TeamLead):
    def subtract(self, x, y):
        return x - y
    
    def divide(self, x, y):
        if y == 0:
            raise ZeroDivisionError("Cannot divide by zero.")
        else:
            return x / y

class Me(Senior1, Senior2):  # Multiple inheritance (Senior1, Senior2 order)
    def square(self, x):
        return x ** 2

# 객체 생성 및 메서드 실행
me = Me()

# 각 메서드 호출 결과 주석 추가
print(me.add(3, 5))        # 8 (Senior1의 add 메서드: 3 + 5 = 8)
print(me.subtract(10, 4))  # 6 (Senior2의 subtract 메서드: 10 - 4 = 6)
print(me.multiply(2, 7))   # 14 (TeamLead의 multiply 메서드: 2 * 7 = 14)
print(me.divide(20, 5))    # 4.0 (Senior2의 divide 메서드 - 오버라이딩된 메서드: 20 / 5 = 4.0)
print(me.square(3))        # 9 (Me의 square 메서드: 3 ** 2 = 9)

 

 

 

 

 

 

 

 

 

class TeamLead:
    def strong_legs(self):
        print("힘찬 다리")

class Senior1(TeamLead):
    def strong_right_arm(self):
        print("힘찬 오른쪽 팔")
        super().strong_legs()  # self를 전달하지 않음

class Senior2(TeamLead):
    def strong_left_arm(self):
        print("힘찬 왼쪽 팔")
        super().strong_legs()  # self를 전달하지 않음

class Me(Senior1, Senior2):
    def good_eyesight(self):
        print("좋은 시력")

    def display_skills(self):
        self.strong_right_arm()
        self.strong_left_arm()
        self.good_eyesight()

# 사용 예시
me = Me()
me.display_skills()

 

답)

class Manager:
    def plan(self):
        print("전체 계획을 세웁니다.")

class Developer(Manager):
    def work(self):
        print("코드를 작성합니다.")

class Tester(Manager):
    def work(self):
        print("테스트를 수행합니다.")

class TechLead(Developer, Tester):
    def daily_work(self):
        super().plan()        # 한 번만 계획을 세웁니다.
        Developer.work(self)  # Developer의 work 호출 (self 전달하지 않음)
        Tester.work(self)     # Tester의 work 호출 (self 전달하지 않음)

# 사용 예시
tech_lead = TechLead()
tech_lead.daily_work()