생활코딩

Coding Everybody

코스 전체목록

닫기

상속

상속이란

상속의 문법 - 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. 김민수
    상속은 재사용이 가능하다
    부모를 기반으로 만들어진 클래스는 또한 다른 클래스의 기반이 될 수 있다. 다만 이러한 재활용성은 모순이 발생할 가능성이 커진다는 점에서 유의해야한다
  2. 김민수
    상속이란
    상속은 해당 클래스가 지닌 객체를 그대로 복사하여 다른 객체의 틀로 만드는 것이다.
    즉, Class Class3(Class1): 이라면 클래스3 는 클래스 1을 상속하게 되며 클래스1이 지닌 기능을 모두 사용할수 있게 되는것이다.
    또한 클래스3는 클래스1의 상속을 받았음으로 클래스1이 수정될시 상속된 다른 클래스는 모두 변경된다.
    이 점에서 클래스의 특성인 유지보수의 유리함이 드러난다.
    만약 결과값이 해당하는 클래스를 찾기 힘든경우 print함수에 해당 클래스의 속성을 호출하여 찾으면 편리함.
  3. 얼그레이
    상속의 기능이 정말 흥미롭네요! 콜론이나 괄호 같은 걸 붙이는 걸 주의해야겠어요 ㅎㅎ 감사합니다!
    190606
  4. p.navillera
    object를 상속 받는 것과 안 받는 것의 차이는 무엇인가요..?
  5. Hotak Choi
    190506 !! 올만에 ㅜㅜ
  6. 190426완료 감사합니다
  7. wiseman
    190420 2153 완료
  8. 190418 1325
    완료입니다. 감사합니다.
  9. 19.04.16
    간만에 쉽게 이해된것 같네요 감사합니다.
  10. 호두
    고맙습니다.
  11. 정석
    좋습니다.
    ^^*!
  12. 주니
    잼 있네요... 감사
  13. kmw8462
    감사합니다.
  14. yareuk
    2018-12-24
  15. 루이보스라떼
    2018.12.08.
  16. 닐반
    2018. 10. 14.
  17. 유닉스가이
    감사합니다.
  18. 해릭
    180722 감사합니다.
  19. Ji Yeoun Park
    2018.07.03 좀 어렵네요
  20. 정병찬
    2018 06 28
    수강완료
  21. Jaeduk Jang
    완료했습니다.
    감사합니다.
  22. user1jena
    도대체 객체지향 프로그래밍을 왜 해야되는건가 의문이 풀리질 않았었는데 이번 강의를 통해 그 의문이 시원하게 풀렸어요! 아직 전문적인 프로그래밍을 하고 있는 것은 아니라 복잡도까지 고민할 필요는 없겠지만, 말씀해주신대로 하나하나 익히면서 좋은 프로그래밍을 할 수 있는 능력을 길러나가야겟어요. 고맙습니다!
  23. 다람쥐
    감사합니다!
  24. 언어정복자
    아직 어렵지만 어렴풋하게라도 다가오는 것 같습니다.
  25. ddogagi
    자전거 설명 보다가 뿜었습니다 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
  26. orez
    재밌는 세상입니다.:-)
  27. 성현아빠
    완료
  28. GoldPenguin
    완료했습니다.
  29. 김태윤
    완료했어요.
  30. blue_blanket
    회사에서 코딩을 당장 써먹어야 하다보니 비전공자 입장에서 힘들고, 적정수준도 알지 못한 채 더 깊은 내용들까지 한꺼번에 접해왔던 것 같아요. 그래서 더 빨리 지쳤던 부분이 있었나 봅니다. 쌤 강의를 들으면서, 초보자가 처음부터 깊은 내용까지 알려고 하는 것은 별로 안좋다라고 말씀해주시는 부분에서 좀 위로가 되었어요. 더불어 기초적인 내용을 반복해서 정확하게 이해하는 부분이 부족하지 않았나 하는 생각도 듭니다. 지금까지 클래스 없이 함수로만 만들었던 코드들을 이 수업 다 듣고, 클래스로 다시 바꾸어 봐도 좋은 실습이 되지 않을까 싶습니다.
    정말 감사합니다.
  31. J.Y.Oh
    좋은 강의 진심으로 감사합니다.
  32. 미림_likelion
    수강 완료했습니다. 감사합니다.
  33. message
    감사합니다. 잘보고 갑니다. 아직은 코드가지고 무엇을 하는지 정확하게는 모르지만
    이해가 가고 좋은 강의 입니다.
  34. 심화평
    17.07.04 감사합니다.
  35. 나만의 부
    2017.04.21 감사합니다~
  36. from San Mateo
    쉬운 설명 감사합니다!
  37. seeong2
    wow-
  38. 환글
    다시 보닌까, 이해가 잘 되네요^^
  39. Philip Oh
    잘 봤습니다~
    감사합니다
  40. JustStudy
    고맙습니다
  41. Pointer
    와우 감사합니다^^
  42. Frank
    상속 신기합니다. ^^
    잘 봤습니다.
  43. egoing
    좋은 의문입니다. 자식 클래스는 부모 클래스에 변화를 주지 못합니다. 말씀하신 것처럼 무엇인가를 추가한 것이 아니라 물려 받은 것이죠.
    대화보기
    • 사진쟁이
      나누기 기능을 추가할 때 CalMultiply에서 상속받지 않고 부모 클래스에서 상속받아서 만들어보니 CalDivide에서 곱하기 기능을 사용할 수 없는데 자식 클래스에서 기능을 추가해도 부모 클래스는 원래 모습을 유지하고 있는 건가요? 리스트에 새로운 데이터를 추가하듯이 생각하면 안 되겠군요. 제가 이해한 게 맞나 모르겠어요 ㅜㅜ
    버전 관리
    egoing
    현재 버전
    선택 버전
    graphittie 자세히 보기