일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- c#코테
- c#문제
- 오블완
- 스파르타코딩클럽
- 유니티게임만들기
- c#기본문법
- 유니티상호작용
- unity3d
- 시샵문법
- 시샵
- 유니티3dui
- 유니티공부
- 유니티
- unity게임만들기
- C#문법
- unity공부
- unity3dservival
- c#프로그래머스기초문법
- c# 백준
- unity3d게임만들기
- 유니티서바이벌게임만들기
- c#기초문법
- 티스토리챌린지
- unity게임
- c#
- c# c#프로그래머스
- 스파르타
- Unity
- Console.WriteLine
- c#코딩기초트레이닝
- Today
- Total
나 개발자 진짜 되냐?
5일차 파이썬 프로그래밍의 날개_클래스편2(생성자, 상속) 본문
좀 길어져서 생성자는 여기에 따로 쓴다.
오구 친구들이 신나게 흔드는 모습을 보니 귀엽다..
아까 내용이 길어져서 사라진
사칙연산 클래스를 가져와보자
class Fourule :
def setdata ( self, fir, sec ) :
self.first = fir
self.second = sec
def add ( self ) :
result = self.first + self.second
return result
...
...
a = Fourule()
a.setdata(2,8)
a.add()
생성자
클래스 안에는 생성자라는 친구를 써줄 수 있다.
생성자는 __init__라고 쓰며
객체가 생성될 때 자동으로 호출되는 메서드이다.
class Fourule :
def __init__(self, fir, sec) :
self.first = fir
self.second = sec
def setdata ( self, fir, sec ) :
self.first = fir
self.second = sec
def add ( self ) :
result = self.first + self.second
return result
...
..
이 친구를 사용하는 이유는
객체에서 초기값을 설정해야 할때,
즉
a.setdata(2,8)를 사용하지 않기 위해서 이다.
__init__ 메서드는 setdata 메서드와 이름만 다르고
다 똑같다. 대신 이름이 __init__이기 때문에
생성자로 인식해서 객체가 생성되는 시점에 자동으로 호출된다.
우리가 생성자를 쓰지 않는다면..
a = Fourule()
a.setdata( 2, 8 )
이렇게 써줘야 하지만
생성자를 써준다면
a = Fourule( 2, 8 )
이렇게 줄일 수 있다.
클래스 상속
복합한 친구가 나왔다.
클래스는 물려줄 수 있는 특징을 가지고 있다.
물려주고! 물려받고!
우리 위에 적었던 Fourule를 상속하는
MoreFourule클래스를 만들어보자
class MoreFourule(Fourule) : pass
상속하기 위해서는
괄호 안에 상속할 클래스 이름을 넣어준다.
즉 MoreFourule가 Fourule를 물려받아서
Fourule 안에 있는 내용을
사용할 수 있는 것이다!
이렇게 상속을 하면
a.MoreFourule( 4, 6 )해주면
a.add() → 10이 나오게 된다.
More에는 a의 b제곱을 계산하는 클래스를 만들어 보자
class MoreFourule(Fourule) :
def jj ( self )
result = self.first * self.second
return = result
그 후
a.MoreFourule( 2,4 )
a.jj → 16
로 나오게 된다.
메서드 오버라이딩
오버라이딩이 익숙하지 않을 텐데... 마찬가지요..
약간 덮어쓰기!로 생각하면 좋을 것 같다.
예를 들어보자
a = Fourule( 4, 0)
a.div()
이렇게 적으면 오류가 생긴다.
왜? 숫자 0이라는 것으로 나누는 것이 아예 안되기 때문이다.
하지만 부모를 건들지 않으면서
오류가 아니라 뭐 0이나 다른 값으로 내고 싶을 땐 어떻게 해야 할까?
class DivFourule(Fourule) :
def div(self) :
if self.second == 0 : # 나누는 값이 0인 경우!
return = 0
else :
return self.first / self.second
이렇게 Fourule에 있는 div 메서드를
동일한 이름으로 다시 적어는
덮어쓰기를 메서드 오버 라이딩이라고 한다.
이렇게 하면 덮어쓴 메서드가 출력되게 된다.
클래스 변수
클래스에도 변수가 있다는 사실!?!? wow!!
객체 변수와 또 다르다는데..
여기서 잠깐
객체 변수는 뭐였지?!
객체변수는 그 객체에서만 쓸 수 있던 변수였다.
그럼 클래스 변수는 뭘까?!
class Name : lastname = "김"
여기서 lastname 이 클래스 변수이다.
말 그대로 클래스 안에 변수를 선언해주었다.
이 변수를 밖에서 출력할 땐 어떻게 해야 할까?!
print (Name.lastname)이라고 해주면 김이 출력된다.
name 클래스를 만든 객체를 통해서도 사용 가능하다.
a = Name()b = Name()
#여기서 a와 b는 객체! name이라는 클래스를 받는 친구
print (a.lastname) → 김
print (b.lastname) → 김
"최"로 바꾸고 싶다면 어떻게 해야 할까?
클래스 밖에서도 가능하다.
Name.lastname = "최" #Name 안에 있는 클래스 변수인 lastname을 바꾸겠다.
print (a.lastname) → 최
print (b.lastname) → 최
여기서 알 수 있듯
클래스 변수이기 때문에 클래스에서 바꿔줘서
모든 객체에 공유된 모습이다.
만약에
Name.lastname = "최"가 아니라
a.lastname = "최"로 바꾸면
a = Name() 이여서 같은 뜻 같겠지만
여기서는
a 객체에 lastname이라는 객체 변수를
새롭게 생성한다는 뜻이기 때문에
b에게는 아무런 영향을 끼치지 않는다.
그래서 a는 최가 된다고해도b는 여전히 김이 된다.
생각보다 어려운 결말이다...
....헷갈리는걸
..한번 더 읽으며 확실히 이해해야겠다
흐흐
끗!
'파이썬을 시작했어요!' 카테고리의 다른 글
5일차 파이썬 프로그래밍의 날개_오류 및 예외처리편 (0) | 2022.12.17 |
---|---|
5일차 파이썬 프로그래밍의 날개_모듈편 (1) | 2022.12.17 |
5일차 파이썬 프로그래밍의 날개_클래스편1 (2) | 2022.12.16 |
4일차 파이썬 프로그래밍 입력과출력_입출력편 (0) | 2022.12.15 |
4일차 파이썬 프로그래밍 입력과출력_함수편2 (2) | 2022.12.15 |