Archive

[파이썬 기초] 상속 본문

공부/Python

[파이썬 기초] 상속

mariabeetle 2017. 10. 3. 17:09

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
Comments