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. JustStudy
    고맙습니다
  2. Pointer
    와우 감사합니다^^
  3. Frank
    상속 신기합니다. ^^
    잘 봤습니다.
  4. egoing
    좋은 의문입니다. 자식 클래스는 부모 클래스에 변화를 주지 못합니다. 말씀하신 것처럼 무엇인가를 추가한 것이 아니라 물려 받은 것이죠.
    대화보기
    • 사진쟁이
      나누기 기능을 추가할 때 CalMultiply에서 상속받지 않고 부모 클래스에서 상속받아서 만들어보니 CalDivide에서 곱하기 기능을 사용할 수 없는데 자식 클래스에서 기능을 추가해도 부모 클래스는 원래 모습을 유지하고 있는 건가요? 리스트에 새로운 데이터를 추가하듯이 생각하면 안 되겠군요. 제가 이해한 게 맞나 모르겠어요 ㅜㅜ
    버전 관리
    egoing
    현재 버전
    선택 버전
    graphittie 자세히 보기