일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- programmers
- DFS: Connected Cell in a Grid
- 프로그래머스
- 머신러닝
- BFS: Shortest Reach in a Graph
- Special String Again
- [sqld]자격증합격
- 파이썬
- candies
- Algorithm
- 격파르타 합격후기
- Find the nearest clone
- 코딩테스트
- Recursion: Davis' Staircase
- python
- Interview Preparation Kit
- 격파르타 후기
- Max Array Sum
- Common Child
- 야근지수
- hackerrank
- 구슬탈출2
- 피보나치 함수
- 매칭점수
- Reverse Shuffle Merge
- 알고리즘
- 백준
- Roads and Libraries
- 해커랭크
- 격파르타 장점
- Today
- Total
Archive
[파이썬 기초] 상속 본문
1. 상속
- 이미 정의된 클래스를 기반으로 새로운 요소를 추가해서 클래스를 다시 정의하는 것을 말한다.
- 이미 있던 클래스를 '슈퍼클래스', 새로 정의한 클래스를 '서브 클래스'라고 부른다.
- 서브 클래스는 슈퍼 클래스가 갖고 있던 기능을 그대로 포함하므로 서브 클래스를 정의할 때 슈퍼 클래스와 서브 클래스의 차이만 다시 정의하면 된다.
2. 클래스를 상속하는 방법
class 서브클래스 이름 ( 슈퍼클래스 이름) :
서브 클래스 정의
- 클래스 이름 뒤에 슈퍼클래스의 이름을 쓰자.
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 31 32 33 34 | class Car: ''' 기본적인 기능을 갖춘 자동차를 나타내는 클래스 ''' def __init()__(self, owner): self.handle = 0 self.car_type="normal" self.owner = owenr def turn_left(self): ''' 핸들을 왼쪽으로 꺾는다 ''' self.handle -= 90 def turn_right(self): ''' 핸들을 오른쪽으로 꺾는다 ''' self.handlef += 90 def show_status(self): ''' 상태를 표시한다 ''' print("---" print("owner:", self.owner) print("car_type:", self.car_type) print("handle:", self.handle) # 서브클래스 정의 class Van(Car): ''' 밴 클래스 ''' def __init()__(self, owner): super().__init()__(owner) self.car_type="van" def open_door(self): ''' 문을 자동으로 연다 ''' print("문이 열렸습니다.") def close_door(self): ''' 문을 자동으로 닫는다''' print("문을 닫았습니다.") | cs |
- 서브클래스의 생성자에서 슈퍼클래스의 __init()__메서드를 호출한다. super()를 사용하면 슈퍼 클래스의 메서드를 호출할 수 있다.
1 2 3 4 5 6 7 8 | # 정의한 클래스를 포함한 모듈을 임포트한다. # car.py안에 정의한 함수와 클래스를 임포트할 수 있다. # 임포트 후 '모듈명.클래스명()'과 같은 형식으로 기술하면 클래스를 이용할 수 있다. import car car1 = car.Van("Gildong") car1.turn_left() # 슈퍼클래스에 있는 메서드를 사용할 수 있다. car1.turn_right() | cs |
3. 상속은 언제 사용할까?
- 자주 사용될 것 같은 요소들을 클래스의 형태로 묶어주자.
4. 메서드 오버라이드
1 2 3 4 5 6 7 8 9 10 11 12 | class SuperClass: def blar(self): print("SuperClass.blar") class SubClass(SuperClass): def blar(self): print("SubClass.blar") it = SubClass() it.blar() # SubClass.blar | cs |
- 슈퍼클래스와 서브 클래스 모두 같은 메서드를 정의하면, 상속받은 슈퍼클래스의 메서드가 서브 클래스의 메서드의 메서드로 새롭게 정의된다.
- 서브클래스에서 슈퍼클래스의 메서드를 오버라이드한 상태라도 슈퍼클래스의 메서드를 super()를 통해 호출할 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | class SuperClass: def blar(self, id): print("---") print("SuperClass.blar=", id) class SubClass(SuperClass): def blar(self, id): super().blar(id) print("SubClass.blar=",id) rc = SuperClass() rc.blar(100) # SuperClass.blar= 100 sc = SubClass() sc.blar(300) # SuperClass.blar= 300 # SubClass.blar= 300 | cs |
5. 다중상속
- 파이썬은 다중상속을 지원하는데, 여러 개의 클래스를 슈퍼클래스로 지정하는걸 의미한다.
class 서브 클래스명 ( 슈퍼 클래스1, 슈퍼 클래스2, 슈퍼 클래스3, ...):
서브 클래스 정의
- 다중상속을 지원하지 않는 언어도 있는데, 예를 들어 클래스A와 클래스B에 동일한 이름의 메서드가 정의되어 있고, 이를 클래스C가 상속하게 되면 어느 메서드를 사용하게 될까?
- 다중상속의 우선순위가 있는데, 파이썬에서는 왼쪽에 지정한 클래스가 가장 우선된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | class A: def print(self): print("A") class B: def print(self): print("B") class C(A,B): pass obj = C() obj.print() # A | cs |
'공부 > Python' 카테고리의 다른 글
파이썬 기초 (0) | 2020.07.29 |
---|---|
[파이썬 기초] 비공개 멤버와 정적 메서드 (0) | 2017.10.04 |
[파이썬 기초] 클래스 (0) | 2017.10.03 |
[파이썬 기초] 데코레이터 (0) | 2017.10.03 |
[파이썬 기초] 리스트 내장 표기 (0) | 2017.10.03 |