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. Ji Yeoun Park
    2018.7.03 감사합니다.
  2. 정병찬
    2018 06 28
    수강완료
  3. 언어정복자
    수강완료했습니다.
  4. 성현아빠
    완료
  5. Gasoiline
    수강 완료했습니다 많은 도움이 되었습니다 감사합니다
    저도 언젠가는 이렇게 배풀면서 살게될 날이 오겠죠? :)
  6. GoldPenguin
    완료했습니다.
  7. 김태윤
    완료했어요
  8. 미림_likelion
    수강 완료했습니다. 감사합니다.
  9. message
    기초 부분을 듣기에 정말 좋은 강의 같습니다.
  10. 심화평
    2017.07.06 감사합니다~
  11. 이한별
    (건의) 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를 넣지 않으셧네요?
          제가 넣기도 해보고 안넣기도 해봣는데 오류는 안나더라구요.
          어떠한 차이가 있나요??
        • 변지훈
          잘 봤습니다!! 감사합니다
        • 닉슨
          파이썬 부분 완료했습니다. 이번에도 감사드립니다. 다음엔 뭘 봐야할지....흠 고민이 됩니다.

          웹 애플리케이션 + 자바+ 파이썬인데 프런트를 해보고 싶기도 하고 리눅스를 하고 싶기도 하네요ㅎㅎ
        • 잘보고있습니다. 감사합니다.ㅎㅎ
        • JustStudy
          에러에서도 더 확실하게 공부하게 됩니다.
          고맙습니다
        • Youngpil Yang
          잘보고 있습니다2
        • 아기장수 우투리
          잘보고있습니다~~
        • 지식여행
          감사합니다. 잘들었습니다.
        • 투투리
          감사합니다
        • sojuilbo@daum.net
          점점 댓글이 줄어 드는군요.......암튼 Egoing님 강의 잘 들었습니다.
        • 구묵
          감사합니다~
        • Seong Nyeon Lee
          잘 봤습니다 ^ ^
        • Frank
          고맙습니다. ^^
        버전 관리
        egoing
        현재 버전
        선택 버전
        graphittie 자세히 보기