| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- 트랜스포머
- RNN
- 자연어처리
- 데이터엔지니어
- Transformer
- UMAP
- 데이터 시각화
- 랭그래프
- 힙정렬
- 머신러닝
- ASR
- Python
- dementional reduction
- python기초
- 알고리즘
- CLIP
- CNN
- TTS
- python 기초
- 에이전트
- LangGraph
- 정보처리기사
- RDBMS
- 딥러닝
- 기초
- SQL
- 생성형 인공지능
- 소프트웨어 개발
- 객체지향
- 캐글
Archives
- Today
- Total
수달이네 기술 블로그
2. 파이썬에서의 상속 본문
기존에 있던 속성과 메서드를 물려받음
class Parent:
pass
class Child(Parent):
pass
위와 같은 형식으로 자식클래스를 부모클래스의 형식을 물려받을 수 있도록 할 수 있다.
class Animal:
def __init__(self, name, age):
self.name = name
self.age = age
def eat(self, food):
print(f'{self.name} {food} 먹습니다')
def sleep(self, hour):
print(f'{self.name} {hour}시간 동안 잠을 잡니다')
animal = Animal('동물', 10)
animal.eat('먹이')
animal.sleep(10)
class Dog(Animal):
pass
# Animal 클래스를 상속 받았기 때문에 Animal 클래스의 생성자
# 매개변수를 전달해야 함
Rucy = Dog('루시', 14)
Rucy.eat('사료')
Rucy.sleep(12)
# 동물 먹이 먹습니다
# 동물 10시간 동안 잠을 잡니다
# 루시 사료 먹습니다
# 루시 12시간 동안 잠을 잡니다
위에서 보듯 Dog는 Animal 클래스를 상속받았으므로 함수를 사용할 수 있다.
생성자
class Parent:
def __init__(self):
print('부모 클래스 생성자 호출')
class Child(Parent):
def __init__(self):
print('Child 클래스 생성자 호출')
super().__init__()
print('모든 생성자 호출 완료')
child = Child()
# Child 클래스 생성자 호출
# 부모 클래스 생성자 호출
# 모든 생성자 호출 완료
클래스 상속시 생성자는
- 자식클래스의 생성자가 호출된다.
- super()함수를 통해 부모클래스 생성자가 호출된다.
- super().init()은 부모 생성자 호출
- 이후 자식클래스의 나머지 생성자 코드가 실행된다.
위에선 자식 생성자가 없는데, 그때는 기본생성자가 만들어져 부모의 생성자가 불러진다.
Object클래스 상속
파이썬에서 클래스는 기본적으로 Object클래스를 상속받는다.
Object클래스는 클래스가 제공하는 기본적인 동작과 메서드를 담고있는 클래스이다.
오버라이딩
class Animal:
def __init__(self, name, age):
self.name = name
self.age = age
def eat(self, food):
print(f'{self.name} {food} 먹습니다')
def sleep(self, hour):
print(f'{self.name} {hour}시간 동안 잠을 잡니다')
class Dog(Animal):
def run(self):
print(f'{self.name} 달립니다')
def eat(self, food):
print(f'{self.name} {food}를 아주 맛있게 먹습니다')
def superEat(self, food):
super().eat(food)
a = Dog('popi',5)
a.eat("치킨") #popi 치킨를 아주 맛있게 먹습니다
상속받은 자식 클래스에서 부모의 메서드를 덮어쓸 수 있다.
만약 자식에서 함수를 수정하지 않으면 부모의 함수를 불러온다.
- 마찬가지로 super().함수를 이용하면 부모의 함수를 부르고 자식의 함수도 함께 불러줄 수 있다.
다중상속
클래스가 둘 이상의 부모클래스로 부터 상속받는 기능
부모끼리 충돌 날 가능성이 있어 다른 언어에선 막아두었지만
파이썬에선 자체에서 부모가 스스로 걸러낸다.
class Parent1:
pass
class Parent2:
pass
class Child(Parent1, Parent2):
pass
클래스가 Object클래스를 기본적으로 상속하잖아요, 그러면 한 클래스에 상속받은 자식 클래스는 Object와 한 클래스를 상속받은 다중 상속을 한건가요? 상속된 부모의 Object를 상속받아 기능을 사용할 수 있는건가요?
class Animal:
def __init__(self, name, age):
self.name = name
self.age = age
def eat(self, food):
print(f'{self.name} {food} 먹습니다')
def sleep(self, hour):
print(f'{self.name} {hour}시간 동안 잠을 잡니다')
class Human:
def __init__(self, name, age):
self.name = name
self.age = age
def study(self, hour):
print(f'{self.name} {hour}시간 동안 공부를 합니다')
def sleep(self, hour):
print(f'{self.name} {hour}시간 동안 꿀잠 잡니다')
class Kim(Animal, Human):
pass
kim = Kim('김사과', 20)
kim.eat('밥')
kim.study(2)
kim.sleep(8)
print(Kim.mro())
위처럼 다중상속은 여러 함수를 상속 받을 수 있다.
그러나 같은 함수가 있으면, mro를 통해 우선으로 사용할 함수를 알 수 있다.
- 둘다 사용하고 싶으면 super를 사용한다.
'언어 > Python' 카테고리의 다른 글
| 3. 파이썬 매직 메서드, 객체지향, 예외처리 (0) | 2025.11.10 |
|---|---|
| 1. 파이썬 객체지향 (0) | 2025.11.05 |
| 17. 스레드 (0) | 2025.09.04 |
| 16. 이터레이터, 제너레이터 (0) | 2025.09.03 |
| 15. 함수3(내장 함수, 정렬, 람다식...) (1) | 2025.09.02 |