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```

## 상속의 문법 - Ruby

```#<Class1:0x0000000270dee0>
"m1"
#<Class3:0x0000000270dcb0>
"m1"
#<Class3:0x0000000270dcb0>
"m2"```

## 상속의 응용

### Python

```class Cal(object):
def __init__(self, v1, v2):
if isinstance(v1, int):
self.v1 = v1
if isinstance(v2, int):
self.v2 = v2
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.multiply())
c2 = CalDivide(20,10)
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```

### Ruby

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