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. 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):
```
이런 식으로 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
자전거 설명 보다가 뿜었습니다 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
버전 관리
 2015-07-18 11:17:57 egoing
현재 버전 2015-07-18 11:17:57
graphittie 자세히 보기
• 토픽 0
• 모듈 0
• 코스 0
• 봤어요 0
• 댓글 0
• 명예의 전당 0