생활코딩

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. 홍주호
    20.12.13
  2. 윤유상
    재사용성을 높이고 유지보수를 쉽게 하는 상속. 감사합니다!
  3. 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완료
    • 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
      자전거 설명 보다가 뿜었습니다 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
    • orez
      재밌는 세상입니다.:-)
    • 성현아빠
      완료
    • GoldPenguin
      완료했습니다.
    • 김태윤
      완료했어요.
    • blue_blanket
      회사에서 코딩을 당장 써먹어야 하다보니 비전공자 입장에서 힘들고, 적정수준도 알지 못한 채 더 깊은 내용들까지 한꺼번에 접해왔던 것 같아요. 그래서 더 빨리 지쳤던 부분이 있었나 봅니다. 쌤 강의를 들으면서, 초보자가 처음부터 깊은 내용까지 알려고 하는 것은 별로 안좋다라고 말씀해주시는 부분에서 좀 위로가 되었어요. 더불어 기초적인 내용을 반복해서 정확하게 이해하는 부분이 부족하지 않았나 하는 생각도 듭니다. 지금까지 클래스 없이 함수로만 만들었던 코드들을 이 수업 다 듣고, 클래스로 다시 바꾸어 봐도 좋은 실습이 되지 않을까 싶습니다.
      정말 감사합니다.
    • 미림_likelion
      수강 완료했습니다. 감사합니다.
    • message
      감사합니다. 잘보고 갑니다. 아직은 코드가지고 무엇을 하는지 정확하게는 모르지만
      이해가 가고 좋은 강의 입니다.
    • 심화평
      17.07.04 감사합니다.
    버전 관리
    egoing
    현재 버전
    선택 버전
    graphittie 자세히 보기