Python & Ruby

다중상속

다중상속은 하나의 클래스가 여러 클래스의 기능을 상속 받는 것을 의미합니다. Python은 다중상속을 지원하지만 Ruby는 지원하지 않습니다. Ruby는 Mixin이라는 접근을 통해서 비슷한 목적을 이룰 수 있습니다. 

다중상속의 형식

다중상속의 단점 

1.py

class C1():
    def c1_m(self):
        print("c1_m")
    def m(self):
        print("C1 m")

class C2():
    def c2_m(self):
        print("c2_m")
    def m(self):
        print("C2 m")

class C3(C2, C1):
    def m(self):
        print("C3 m")

c = C3()
c.c1_m()
c.c2_m()
c.m()
print(C3.__mro__)

ideone.com

 다중상속의 활용

2.py

class CalMultiply():
    def multiply(self):
        return self.v1*self.v2
class CalDivide():
    def divide(self):
        return self.v1/self.v2
class Cal(CalMultiply, CalDivide):
    def __init__(self, v1, v2):
        if isinstance(v1, int):
            self.v1 = v1
        if isinstance(v2, int):
            self.v2 = v2
    def add(self):
        return self.v1+self.v2
    def subtract(self):
        return self.v1-self.v2
    def setV1(self, v):
        if isinstance(v, int):
            self.v1 = v
    def getV1(self):
        return self.v1
c = Cal(100, 10)
print(c.add())
print(c.multiply())
print(c.divide())

ideone.com

댓글

댓글 본문
  1. 미뇨르
    210710 완료!!
  2. 정효빈
    다중상속 한번에 3개도 되나요?
  3. 정효빈
    잘들었습니다!
  4. 정효빈
    잘들었습니다!
  5. 드림보이
    잘 들었습니다....
  6. 후니
    완료
  7. 홍주호
    20.12.14 완료
  8. 윤유상
    부모 클래스가 자식 클래스를 상속해서 동시에 서로 상속 할 수는 없는 거군요 ㅎㅎ 감사합니다!
  9. 양민
    12.7
  10. cgoing
    cgoing / 2020.09.29
  11. 허우룩
    2020.09.25
  12. 김철새
    감사합니다
  13. PlayerSEAN
    Cookie and Cream... 쿠키앤크림님 따라잡기
    2020/08/09 완료
  14. 쿠키앤크림
    2020/07/04 완료
  15. 김광현
    6/7완료
  16. oxugi
    2020/05/12 완료
  17. 홍주호
    20190825 완료
  18. 허니비
    190808
  19. 얼그레이
    감사합니다! 아직은 많이 부족하지만 선생님 덕분에 파이썬에 대해서 어느 정도 알게 된 것 같아요 앞으로도 열심히 공부하겠습니다 :)
    190608
  20. Hotak Choi
    앗 여기가 파이썬 마지막이군요! 강의 정말 감사합니다 ㅜㅜ
  21. Hotak Choi
    19/05/11
  22. huyk
    190510 완료 감사합니다
  23. 19.04.25 완료
  24. 호두
    고맙습니다
  25. 정돌
    좋아요 !
    ^^*!
  26. kmw8462
    감사합니다.
  27. yareuk
    2018-12-26
  28. 닐반
    2018. 10. 15.
  29. 다람쥐
    감사합니다.
  30. Ji Yeoun Park
    2018.7.03 감사합니다.
  31. 정병찬
    2018 06 28
    수강완료
  32. 언어정복자
    수강완료했습니다.
  33. 성현아빠
    완료
  34. Gasoiline
    수강 완료했습니다 많은 도움이 되었습니다 감사합니다
    저도 언젠가는 이렇게 배풀면서 살게될 날이 오겠죠? :)
  35. GoldPenguin
    완료했습니다.
  36. 김태윤
    완료했어요
  37. 미림_likelion
    수강 완료했습니다. 감사합니다.
  38. message
    기초 부분을 듣기에 정말 좋은 강의 같습니다.
  39. 심화평
    2017.07.06 감사합니다~
  40. 이한별
    (건의) java.lang 은 클래스가 아니라 패키지입니다.
    대화보기
    • Fgoing
      파이썬을 목표로하여 듣다보니 다 들었습니다.
      몇번씩 반복해서 곱씹어 들어야 잘 이해할 수 있을 것 같지만,
      그래도 한번 끝냈다는 기쁨이 큽니다! 이고잉님 정말 감사합니다!
    • 나만의 부
      2017.04.30 감사합니다~
    • 변준석
      Object는 안써도 자동으로 상속되는 것으로 알고 있는데 제 파이썬은 분면 버전 3점대를 사용하는데 왜 object를 쓰지 않으면 오류가 날까요??
      Traceback (most recent call last):
      File "/Users/byunjunsuk/Documents/python_ruby/Multiple_inheritance/1.py", line 22, in <module>
      print (C3.__mro__)
      AttributeError: class C3 has no attribute '__mro__'

      다음과 같은 오류가 납니다. object를 사용하면 문제는 해결되고요
    • kpark
      Object는 안써도 자동으로 상속됩니다.
      즉, 모든 클래스의 부모는 Object라고 할 수 있습니다.
      아래 예제를 보면서 확인 가능합니다.
      1. class X():
      pass
      print(X.__mro__)

      2. class X(object):
      pass
      print(X.__mro__)


      혹시 java를 배우신분은 lang이라는 class를 들어보셨을텐데 이와 같다고 보면됩니다.
    • 자바몬
      object를 명시해주는건 단일 클래스라서 그런거 같은데욥
      넣어주는게 가독성에 더 좋을듯하네염
      대화보기
      • 문돌이
        감사합니다 잘 완료했습니다 :)
      • Philip Oh
        잘 봤습니다~ 감사합니다~
        다시 첫 강의부터 돌려봐야겠습니다:)
      • python 잘봤습니다 감사합니다
      • 코기오빠님
        ㅋㅋㅋㅋ 할루 저도 잘봤습니다. 감사합니다 이고잉님
        대화보기
        • class 상속을 할때 괄호 안에 object를 항상 넣으셨는데,
          이번에 다중상속 첫번째 강의에는 object를 넣지 않으셧네요?
          제가 넣기도 해보고 안넣기도 해봣는데 오류는 안나더라구요.
          어떠한 차이가 있나요??
        버전 관리
        egoing
        현재 버전
        선택 버전
        graphittie 자세히 보기