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. 변준석
    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를 사용하면 문제는 해결되고요
  2. Object는 안써도 자동으로 상속됩니다.
    즉, 모든 클래스의 부모는 Object라고 할 수 있습니다.
    아래 예제를 보면서 확인 가능합니다.
    1. class X():
    pass
    print(X.__mro__)

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


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

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