Python & Ruby

상속

상속이란

상속의 문법 - Python

Python

class Class1(object):
    def method1(self): return 'm1'
c1 = Class1()
print(c1, c1.method1())

class Class3(Class1):
    def method2(self): return 'm2'
c3 = Class3()
print(c3, c3.method1())
print(c3, c3.method2())

class Class2(object):
    def method1(self): return 'm1'
    def method2(self): return 'm2'
c2 = Class2()
print(c2, c2.method1())
print(c2, c2.method2())
<__main__.Class1 object at 0xb757dfec> m1
<__main__.Class3 object at 0xb758704c> m1
<__main__.Class3 object at 0xb758704c> m2
<__main__.Class2 object at 0xb758708c> m1
<__main__.Class2 object at 0xb758708c> m2

ideone.com 

상속의 문법 - Ruby

#<Class1:0x0000000270dee0>
"m1"
#<Class3:0x0000000270dcb0>
"m1"
#<Class3:0x0000000270dcb0>
"m2"

ideone.com 

상속의 응용

Python

class Cal(object):
    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
class CalMultiply(Cal):
    def multiply(self):
        return self.v1*self.v2
class CalDivide(CalMultiply):
    def divide(self):
        return self.v1/self.v2
c1 = CalMultiply(10,10)
print(c1.add())
print(c1.multiply())
c2 = CalDivide(20,10)
print(c2, c2.add())
print(c2, c2.multiply())
print(c2, c2.divide())
20
100
<__main__.CalDivide object at 0x000000000316CDA0> 30
<__main__.CalDivide object at 0x000000000316CDA0> 200
<__main__.CalDivide object at 0x000000000316CDA0> 2.0

ideone.com 

Ruby

class Cal
  attr_reader :v1, :v2
  attr_writer :v1
  def initialize(v1,v2)
    @v1 = v1
    @v2 = v2
  end
  def add()
    return @v1+@v2
  end
  def subtract()
    return @v1-@v2
  end
  def setV1(v)
    if v.is_a?(Integer)
      @v1 = v
    end
  end
  def getV1()
    return @v1
  end
end
class CalMultiply < Cal
  def multiply()
    return @v1*@v2
  end
end
class CalDivide < CalMultiply
  def divide()
    return @v1/@v2
  end
end
c1 = CalMultiply.new(10,10)
p c1.add()
p c1.multiply()
c2 = CalDivide.new(20, 10)
p c2, c2.add()
p c2, c2.multiply()
p c2, c2.divide()
20
100
#<CalDivide:0x0000000289c108 @v1=20, @v2=10>
30
#<CalDivide:0x0000000289c108 @v1=20, @v2=10>
200
#<CalDivide:0x0000000289c108 @v1=20, @v2=10>
2

ideone.com

댓글

댓글 본문
작성자
비밀번호
  1. GoldPenguin
    완료했습니다.
  2. 김태윤
    완료했어요.
  3. blue_blanket
    회사에서 코딩을 당장 써먹어야 하다보니 비전공자 입장에서 힘들고, 적정수준도 알지 못한 채 더 깊은 내용들까지 한꺼번에 접해왔던 것 같아요. 그래서 더 빨리 지쳤던 부분이 있었나 봅니다. 쌤 강의를 들으면서, 초보자가 처음부터 깊은 내용까지 알려고 하는 것은 별로 안좋다라고 말씀해주시는 부분에서 좀 위로가 되었어요. 더불어 기초적인 내용을 반복해서 정확하게 이해하는 부분이 부족하지 않았나 하는 생각도 듭니다. 지금까지 클래스 없이 함수로만 만들었던 코드들을 이 수업 다 듣고, 클래스로 다시 바꾸어 봐도 좋은 실습이 되지 않을까 싶습니다.
    정말 감사합니다.
  4. J.Y.Oh
    좋은 강의 진심으로 감사합니다.
  5. 미림_likelion
    수강 완료했습니다. 감사합니다.
  6. message
    감사합니다. 잘보고 갑니다. 아직은 코드가지고 무엇을 하는지 정확하게는 모르지만
    이해가 가고 좋은 강의 입니다.
  7. 심화평
    17.07.04 감사합니다.
  8. 나만의 부
    2017.04.21 감사합니다~
  9. from San Mateo
    쉬운 설명 감사합니다!
  10. seeong2
    wow-
  11. 환글
    다시 보닌까, 이해가 잘 되네요^^
  12. Philip Oh
    잘 봤습니다~
    감사합니다
  13. JustStudy
    고맙습니다
  14. Pointer
    와우 감사합니다^^
  15. Frank
    상속 신기합니다. ^^
    잘 봤습니다.
  16. egoing
    좋은 의문입니다. 자식 클래스는 부모 클래스에 변화를 주지 못합니다. 말씀하신 것처럼 무엇인가를 추가한 것이 아니라 물려 받은 것이죠.
    대화보기
    • 사진쟁이
      나누기 기능을 추가할 때 CalMultiply에서 상속받지 않고 부모 클래스에서 상속받아서 만들어보니 CalDivide에서 곱하기 기능을 사용할 수 없는데 자식 클래스에서 기능을 추가해도 부모 클래스는 원래 모습을 유지하고 있는 건가요? 리스트에 새로운 데이터를 추가하듯이 생각하면 안 되겠군요. 제가 이해한 게 맞나 모르겠어요 ㅜㅜ
    버전 관리
    egoing
    현재 버전
    선택 버전
    graphittie 자세히 보기