클래스 상속
'''
상속 ( inheritance )
'''
# 애완동물 관리 어플리케이션 개발중입니다. ( 강아지와 고양이, 새, 거북이, ....... ...)
'''
고양이 ======================> Cat
속성: 이름, 나이 ,성별 =========> 인스턴스 변수 ( 생성자 이용해서 초기화 )
동작: 먹기, 자기, 뛰기 =========> 메서드
강아지 =========================> Dog
속성: 이름, 나이, 색상 =========> 인스턴스 변수 ( 생성자 이용해서 초기화 )
동작: 먹기, 자기, 수영 ========> 메서드
'''
class Cat:
def __init__(self,username, age, gender):
self.username = username
self.age = age
self.gender = gender
def cat_eat(self):
print("고양이 먹기")
def cat_sleep(self):
print("고양이 자기")
def cat_뛰기(self):
print("고양이 뛰기")
# getter와 setter 메서드 생략
class Dog:
def __init__(self,username, age, color):
self.username = username
self.age = age
self.color = color
def dog_eat(self):
print("강아지 먹기")
def dog_sleep(self):
print("강아지 자기")
def dog_swim(self):
print("강아지 수영하기")
# getter와 setter 메서드 생략
c1 = Cat("야옹이",2,"암컷")
d1 = Dog("망치",1, "흰색")
print("고양이정보: 이름:{} 나이:{}, 성별:{}".format(c1.username, c1.age, c1.gender))
print("강아지정보: 이름:{} 나이:{}, 성별:{}".format(d1.username, d1.age, d1.color))
클래스 상속 전
'''
상속 ( inheritance )
'''
# 애완동물 관리 어플리케이션 개발중입니다. ( 강아지와 고양이, 새, 거북이, ....... ...)
'''
고양이 ======================> Cat
속성: 이름, 나이 ,성별 =========> 인스턴스 변수 ( 생성자 이용해서 초기화 )
동작: 먹기, 자기, 뛰기 =========> 메서드
강아지 =========================> Dog
속성: 이름, 나이, 색상 =========> 인스턴스 변수 ( 생성자 이용해서 초기화 )
동작: 먹기, 자기, 수영 ========> 메서드
'''
class Cat:
def __init__(self, username, age, gender):
self.username = username
self.age = age
self.gender = gender
def cat_eat(self):
print("고양이 먹기")
def cat_sleep(self):
print("고양이 자기")
def cat_run(self):
print("고양이 뛰기")
# getter와 setter 메서드 생략
class Dog:
def __init__(self, username, age, color):
self.username = username
self.age = age
self.color = color
def dog_eat(self):
print("강아지 먹기")
def dog_sleep(self):
print("강아지 자기")
def dog_swim(self):
print("강아지 수영하기")
# getter와 setter 메서드 생략
c1 = Cat("야옹이", 2, "암컷")
d1 = Dog("망치", 1, "흰색")
print("고양이정보: 이름:{} 나이:{}, 성별:{}".format(c1.username, c1.age, c1.gender))
print("강아지정보: 이름:{} 나이:{}, 성별:{}".format(d1.username, d1.age, d1.color))
# 고양이 액션
c1.cat_eat()
c1.cat_sleep()
c1.cat_run()
# 강아지 액션
d1.dog_eat()
d1.dog_sleep()
d1.dog_swim()
'''
상속전 코드 문제점
1. 코드 중복 ====> 해결: 중복 제거
- 동일한 속성들이 각 클래스 중복됨.
2. 메서드명이 너무 많다. ========> 해결: 동일한 이름으로
- 프로그램 관리가 어려워진다.
'''
클래스 상속 후 1
'''
상속 ( inheritance) 방법
1. 공통적인 속성 및 동작을 추출해서 새로운 클래스(Pet)로 작성한다.
이 클래스는 기존의 존재하는 클래스(강아지, 고양이)를 개념적으로 포함하는 클래스(애완동물 Pet)로 작성한다.
Pet
Cat Dog
2. 상속 적용
class Cat(Pet):
'''
# 1. 공통적인 속성 및 동작을 추출해서 새로운 클래스(Pet) 생성
class Pet:
# 공통적인 속성 추출
def __init__(self,username, age):
self.username = username
self.age = age
class Cat(Pet):
def __init__(self, username, age, gender):
super().__init__(username, age)
self.gender = gender
def cat_print(self):
print(self.username, self.age)
c1 = Cat("야옹이", 2, "암컷") # 이름, 나이, 성별
class Dog(Pet):
def __init__(self, username, age, color):
super().__init__(username, age)
self.color = color
def dog_print(self):
print(self.username, self.age)
# p1 = Pet("망치", 2)
c1 = Cat("야옹이", 2, "암컷") # 이름, 나이, 성별
d1 = Dog("망치", 1, "흰색") # 이름, 나이 , 색상
c1.cat_print()
d1.dog_print()
클래스 상속 후 2 부모호출1
class Pet:
def __init__(self):
print("Pet 생성자")
self.age = 10
class Cat(Pet):
def __init__(self):
super().__init__()
print("Cat 생성자")
print(self.age)
# 자식인 Cat 생성 ===> 내부적으로는 Pet을 먼저 생성해야 된다.
c1 = Cat()
클래스 상속 후 2 부모호출2
class Pet:
def __init__(self, username, age): # 공통적인 속성을 추출해서 부모인 Pet에서 선언
self.username = username
self.age = age
class Cat(Pet):
def __init__(self, username, age, gender): # 이름, 나이, 성별 3가지 속성을 가진 Cat
# self.username = username
# self.age = age
super().__init__(username,age) # 부모생성자를 호출하면서 부모를 먼저 생성함.
# 동시에 부모에서 선언된 username과 age 값을 초기화하기 위해서
# 로컬값을 전달함
self.gender = gender
# def cat_print(self):
# print(self.username, self.age, self.gender)
def __str__(self):
return ">>>" + self.username + str(self.age)+ self.gender
c1 = Cat("야옹이", 2, "암컷")
# c1.cat_print()
print(c1) # ==> __str__ 자동호출
# 계층구조
print(Cat.mro())
'python' 카테고리의 다른 글
[python] 강제성 부여 추상클래스 | 매직 메서드 (0) | 2022.09.26 |
---|---|
[python] class 메서드 오버라이딩 (0) | 2022.09.26 |
[python] 클래스 변수 | 클래스 매서드 (0) | 2022.09.26 |
[python] class 중간 정리 (0) | 2022.09.26 |
[python] class 객체생성 | 생성자 (0) | 2022.09.26 |