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. Gasoiline
    수강 완료했습니다 많은 도움이 되었습니다 감사합니다
    저도 언젠가는 이렇게 배풀면서 살게될 날이 오겠죠? :)
  2. GoldPenguin
    완료했습니다.
  3. 김태윤
    완료했어요
  4. 미림_likelion
    수강 완료했습니다. 감사합니다.
  5. message
    기초 부분을 듣기에 정말 좋은 강의 같습니다.
  6. 심화평
    2017.07.06 감사합니다~
  7. 이한별
    (건의) 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를 사용하면 문제는 해결되고요
    • 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 자세히 보기