생활코딩

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

상속의 문법 - 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. 홍주호
20.12.13
2. 윤유상
재사용성을 높이고 유지보수를 쉽게 하는 상속. 감사합니다!
3. 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완료
• 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 감사합니다.
버전 관리
 2015-07-18 11:17:57 egoing
현재 버전 2015-07-18 11:17:57
graphittie 자세히 보기
• 토픽 0
• 모듈 0
• 코스 0
• 봤어요 0
• 댓글 0
• 명예의 전당 0