Pytyon & Ruby & Atom

상속

상속이란

상속의 문법 - 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. 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 감사합니다.
    • 나만의 부
      2017.04.21 감사합니다~
    • from San Mateo
      쉬운 설명 감사합니다!
    버전 관리
    egoing
    현재 버전
    선택 버전
    graphittie 자세히 보기