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. Victorim
    완료!
  2. 냥더쿠
    210806
  3. 미뇨르
    210704 완료!!
  4. 정효빈
    잘들었습니다!! 항상 감사합니다!
  5. 드림보이
    잘 들었습니다...
  6. 한성수
    안녕하세요 동영상을 보다가 궁금한점이 있어 질문을 드립니다.

    저번강의에서 인스턴스 변수앞에 __(언더바2개)를 붙이면 외부에서 변수로 접근하는걸 막을수있다고 하였는데 기존에 설정해둔 객체에서 __로 접근을 막았을경우에는 상속을 사용할수있는 방법은 없는건가요?
  7. 후니
    완료
  8. Hyunwoo Kim
    210207 감사히 잘 들었습니다 :)
  9. 홍주호
    20.12.13
  10. 윤유상
    재사용성을 높이고 유지보수를 쉽게 하는 상속. 감사합니다!
  11. atiktook
    안녕하세요 많이 늦기는 했지만 혹시나 싶어서 답글 답니다. 저도 확실친 않지만 아마 변수의 값들이 int 정수로 설정되어있기 때문에 자동으로 내림이 되는 것 같습니다.
    ```
    class CalDivide(CalMultiply):
    def divide(self):
    answer = self.v1/self.v2
    return float(answer)
    ```
    이런 식으로 divide 값만 float()처리를 하니 2.8xxx 으로 소수값을 얻을 수 있었어요.
    대화보기
    • cgoing
      cgoing / 2020.09.28
    • 허우룩
      2020.09.24
    • acs0209
      힘들다잉 ㅠ
    • 캄바캄바
      2020/08/20
    • PlayerSEAN
      쿠키앤크림님 따라잡기
      2020/08/06 완료
    • 쿠키앤크림
      pupu님 따라잡기
      2020/07/04 완료
    • 김광현
      6/4완료
    • oxugi
      2020/04/02 완료
    • 맥반장
      2020-04-01 완료!
    • liero1p
      divide를 실습해볼때, 20,7 등을 입력하면 20/7 = 2.8... 이 될텐데 소수점 이하는 잘라서 2가 출력이 되네요. 저만 그런것인지, 아니면 소수점 이하가 나오게 하려면 어떤 방법이 있는지 아시는 분은 알려주시면 감사하겠습니다 :)
    • 도전차차차
      2019.11.01
    • 가재준
      완료
    • 홍주호
      완료
    • pythoner
      자전거 예시 너무 웃겨요 :)
    • 허니비
      190808
    • 김민수
      상속은 재사용이 가능하다
      부모를 기반으로 만들어진 클래스는 또한 다른 클래스의 기반이 될 수 있다. 다만 이러한 재활용성은 모순이 발생할 가능성이 커진다는 점에서 유의해야한다
    • 김민수
      상속이란
      상속은 해당 클래스가 지닌 객체를 그대로 복사하여 다른 객체의 틀로 만드는 것이다.
      즉, Class Class3(Class1): 이라면 클래스3 는 클래스 1을 상속하게 되며 클래스1이 지닌 기능을 모두 사용할수 있게 되는것이다.
      또한 클래스3는 클래스1의 상속을 받았음으로 클래스1이 수정될시 상속된 다른 클래스는 모두 변경된다.
      이 점에서 클래스의 특성인 유지보수의 유리함이 드러난다.
      만약 결과값이 해당하는 클래스를 찾기 힘든경우 print함수에 해당 클래스의 속성을 호출하여 찾으면 편리함.
    • 얼그레이
      상속의 기능이 정말 흥미롭네요! 콜론이나 괄호 같은 걸 붙이는 걸 주의해야겠어요 ㅎㅎ 감사합니다!
      190606
    • p.navillera
      object를 상속 받는 것과 안 받는 것의 차이는 무엇인가요..?
    • Hotak Choi
      190506 !! 올만에 ㅜㅜ
    • huyk
      190426완료 감사합니다
    • wiseman
      190420 2153 완료
    • 19.04.16
      간만에 쉽게 이해된것 같네요 감사합니다.
    • 호두
      고맙습니다.
    • 정석
      좋습니다.
      ^^*!
    • 주니
      잼 있네요... 감사
    • kmw8462
      감사합니다.
    • yareuk
      2018-12-24
    • 루이보스라떼
      2018.12.08.
    • 닐반
      2018. 10. 14.
    • 유닉스가이
      감사합니다.
    • 해릭
      180722 감사합니다.
    • Ji Yeoun Park
      2018.07.03 좀 어렵네요
    • 정병찬
      2018 06 28
      수강완료
    • Jaeduk Jang
      완료했습니다.
      감사합니다.
    • user1jena
      도대체 객체지향 프로그래밍을 왜 해야되는건가 의문이 풀리질 않았었는데 이번 강의를 통해 그 의문이 시원하게 풀렸어요! 아직 전문적인 프로그래밍을 하고 있는 것은 아니라 복잡도까지 고민할 필요는 없겠지만, 말씀해주신대로 하나하나 익히면서 좋은 프로그래밍을 할 수 있는 능력을 길러나가야겟어요. 고맙습니다!
    • 다람쥐
      감사합니다!
    • 언어정복자
      아직 어렵지만 어렴풋하게라도 다가오는 것 같습니다.
    • ddogagi
      자전거 설명 보다가 뿜었습니다 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
    버전 관리
    egoing
    현재 버전
    선택 버전
    graphittie 자세히 보기