본문 바로가기
Python

[Python 기초] 파이썬 클래스 - 상속, 다중 상속

by dev수니 2021. 4. 3.
반응형

 

 

 1  상속

 

 

 

상속받고자 하는 클래스로부터 멤버 필드를 물려받는 기능을 한다.
기본 클래스로부터 기능을 물려받아서 새로운 클래스를 작성할 수 있게 한다.

class 클래스명(상속받을 클래스명):

 

 

 

기본클래스와 상속된 클래스를 다음과 같이 호칭한다.

  부모클래스, 자식클래스
  기본클래스, 파생클래스
  상위클래스, 하위클래스

 

 

 

 

부모클래스의 멤버를 물려받는다.

따라서 부모클래스의 멤버의 개수보다 자식클래스의 멤버의 개수가 더 적을 수 없다.

 

 

 

 

 


 

 

 

 2  다중 상속

 

 

 

 

클래스들끼리 여러개를 상속 받을 수 있다.

class 클래스명(상위클래스1, 상위클래스2, ...)

 

 

다중상속을 받을 경우 상속받은 모든 기반 클래스의 기능을 상속받는다.

 

 

 


 

 

 

Ex 예제

 

 

 

 

 

# 다음 클래스의 상속을 이용하여 캐릭터 클래스를 만들어보자.

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

35

36

37

38

# 기본 캐릭터(부모클래스)

class Character:

     def __init__(self,id1="무명씨",hp=0,mp=0): # 매개변수 id1, hp,mp를 초기화

          self.id1 = id1

          self.hp = hp

          self.mp = mp

 

     def info(self):

          print("id",self.id1)

          print("hp",self.hp)

          print("mp",self.mp)

 

     def at(self):

          print("기본공격")

 

# 전사 (자식클래스)

class Warrior(Character):

     pass

 

# 마법사(자식클래스)

class Wizard(Character):

     pass

 

# 궁수(자식클래스)

class Archer(Character):

     pass

 

# 몬스터(자식클래스)

class Monster(Character):

     pass

 

# 전사 객체 생성

w1 = Warrior("오빠")

w1.at()

 

# 몬스터 객체 생성

m1 = Monster("오크",100,100)

m1.info()

Colored by Color Scripter

cs
기본공격
id 오크
hp 100
mp 100

위처럼 Character 클래스를 상속받는 캐릭터 클래스를 여러개 만들어 주었다.

 

그리고 줄33에서 Warrior 객체에 인수를 id1값만 담아주었다. 이는 줄3에서 id1, hp, mp를 초기화해 주었기 때문에 hp, mp 값을 입력해 주지 않아도 자동으로 초기화된 값으로 세팅된다.

 

또한 Character 클래스로부터 메서드를 상속받아 줄37에 캐릭터의 id1, hp, mp 값을 입력받은 것을 볼 수 있다. 그리고 info() 메서드를 통해 몬스터 클래스의 정보를 출력해 주었다.

 

 

 

 

 

 

 

 

평균 클래스
# 평균 내는 기능
# 총점 클래스
# 총점 저장 변수
# 총점 계산 기능

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

class Avg:

     def __init__(self): # 기본 생성자

          self.avg = 0

 

     def average(self,total):

          self.avg = self.total/3

          print("평균",self.avg)

 

class Total(Avg):

     def total(self,kor,math,eng):

          self.kor = kor

          self.math = math

          self.eng = eng

          self.total = kor+math+eng

 

          self.average(self.total)

 

person1 = Total()

person1.total(92,92,92)

person2 = Total()

person2.total(86,75,83)

cs
평균 92.0
평균 81.33333333333333

 

 

 

 

 

 

# 교수, 어린이, 학생
# 사람-> 먹기, 놀기, 자기 기능

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

# 기본클래스(부모클래스)

class Person:

     def __init__(self,name,age,job):

          self.name = name

          self.age = age

          self.job = job

          

     def eat(self):

          print(self.name,"님이 먹는다.")

     def sleep(self):

          print(self.name,"님이 잔다.")

     def play(self):

          print(self.name,"님이 논다.")

          

     def __del(self):

          print("객체가 소멸합니다.")

          

class Child(Person):

     pass

class Students(Person):

     pass

class Professor(Person):

     pass

cs

 

 

 

 

 

 

 

# 다중 상속을 이용한 신용카드 클래스

# 신용카드
# 놀이동산 50% , 영화 몇회 무료 , 쇼핑 5%할인 , 교통카드

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

class Trans_Card:   # 교통카드

     pass

 

class Shopping:     # 쇼핑

     pass

 

class Movie:   # 영화무료

     pass

 

class Park:    #놀이동산 할인

     pass

 

class Card:

     def __init__(self,name,pw,num):

          self.name = name

          self.pw = pw

          self.number = num

          print("카드생성완료")

 

# 삼성카드 -> 쇼핑,교통

class Samsung_Card(Card,Shopping,Trans_Card):

     pass

# 롯데카드 -> 영화

class Lotte_Card(Card,Movie):

     pass

# KB카드 

class Kb_Card(Card):

     pass

Colored by Color Scripter

cs

 

 

 

 

반응형

댓글