2022-11-23 코딩학당 2
오늘배운 거슨 파이썬 오브젝트 !
컵 안에 물을 채워넣거나 빼는 것을 표현하는 것,
삼각형, 사각형 도형을 그리는 걸 만들어보면서
객체.함수.메소드의 정의와 상속의 개념에 대해서 배웠다
객체, 함수, 메소드 설명해주실때 사실 잠깐 멍때려서ㅋㅋ..
검색을 해봤눈데
https://coding-kindergarten.tistory.com/56
[파이썬 중급 문법] 클래스(class) 총정리 1편_객체,속성,메소드,인스턴스
안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다. 코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록
coding-kindergarten.tistory.com
2) 속성과 메소드
앞서 클래스를 빵 만드는 기계(함수)와 입력과 출력(변수)의 정보를 담은 설계도라고 설명했습니다.
지금 배울 속성(attribute)과 메소드(method)는 각각 설계도에 표시되어 있는 변수와 함수라고 이해하시면 됩니다.
클래스의 변수 = 속성 (attribute)
클래스의 함수 = 메소드 (method)
이라고 나와있구
함수와 메소드가 좀 다른점이 있다구 그래서 찾아봤눈데
[Python] 함수와 메소드의 차이점
파이썬을 공부하는 내내 함수와 메소드라는 단어를 자주 들었다. 그런데 막상 배운 것들을 블로그에 글로 정리할 때마다 이 단어를 함수라고 말해야할지, 메소드라고 말해야할지 몇 번 고민했
velog.io
결론은 print() 와 같이 그냥 실행할수있는? 함수가 있고
클래스 내에서 실행되는 것이 메소드...
메소드를 사용하려면 클래스 정의가 꼭 선행되어야 한다 !
<컵안에 물이 들어있고, 물을 일정량만큼 뺀다(마신다)>
여기에서 생각해야하는 것은
1. 컵의 용량
2. 물이 담긴 양
class Cup:
def __init__(self, volume):
self.volume = volume
def drink(self, vol):
self.volume -= vol
print('drink', vol, 'remain', self.volume)
c = Cup(10)
c.drink(3)
c.drink(3)
c.drink(3)
c.drink(3)
c.drink(3)
c2 = Cup(1)
c2.drink(1)
c2.drink(1)
Cup이라는 클래스 안에서
__init__ 으로 컵의 용량을 정의해주고
drink 라는 이름의 함수를 정의했다.
drink를 하면 현재 용량에서 넣는 값만큼 - 되고, 현재 남은 양을 출력되도록 했다
여기까지만 하면 계속 빠지기 때문에
실제 물이 담긴거라면 음수값이 없겠지만, 지금은 정의해준게 없어서 음수로 계속 빠졌음
그래서 다음에 한게
<컵에 물을 넣어서 컵의 용량이 꽉차면 "더이상 부을 수 없습니다" 출력하기>
(물이 없는걸로 시작할수도있고, 조금 있는상태로 시작할 수도 있음)
class Cup:
def __init__(self, volume, amount=0):
self.volume = volume
self.amount = amount
def pour(self, amt):
remain = self.volume - self.amount
if amt <= remain:
self.amount += amt
print('pour', amt, 'remain', self.amount)
else:
print("더이상 부을 수 없습니다")
c1 = Cup(10)
c1.pour(5)
c1.pour(5)
c1.pour(5)
c2 = Cup(5, 2)
c2.pour(2)
c2.pour(2)
똑같이 Cup 클래스를 정의해준 다음
이번에는 현재 양을 나타내는게 필요해서 amount를 추가로 정의해줬다
그리고 pour 에 if/else 조건문으로
안넘쳤을때는 현재양을, 넘쳤을때는 문구를 출력하는 것을 넣었음
여기에는 pour라는 행위를 하기 전에
현재 양을 확인해서 pour 할 수 있는 지 없는지를 판단해야하기 때문에
remain을 새로 정의해주었음!
그다음 한거시
<컵에 물을 계속 부을 수 있는데, 현재 차있는 용량과 넘치면 "흘러넘침"이 출력하기>
class Cup:
def __init__(self, volume, amount):
self.volume = volume
self.amount = amount
def pour(self, amt):
remain = self.volume - self.amount
if remain <= amt:
self.amount += remain
print("차있는용량",self.amount,"흘러넘침", amt-remain)
else:
self.amount += amt
c1 = Cup(10, 5)
c1.pour(3)
c1.pour(3)
c1.pour(3)
이거는 다른분이 해서 완전히 이해된거는 아니지만
음 일단 remain 정의는 같게 해주고
remain이 amt와 작거나 같을때는 self.amount와 remain을 합하고 그 값을 self.amount에 할당했다(연산자 사용)
그리고 차있는 용량과 흘러넘친 용량을 출력하도록 함
그리고 else부분은 remain이 클때, 즉 컵에 물을 넣을 수 있는 용량이 넣는양보다 클때
self.amount에 넣는 양(amt)을 ㅎ바하고 그 값에 self.amount에 할당했다...
그리고 별도로 출력하라는 명령이 없어서 뭐가 안나오긴했음..
라고 이해했는데 사실 잘 이해한건지 머르겟다 ㅠ
글구 연산자 모르는거 쓰셔가지구 9ㅅ9 검색햇움
https://corytips.tistory.com/162
파이썬 - 할당연산자 (=, +=, -=, *=, /=, %=, **=, //=)
파이썬에서 기본으로 사용되는 할당연사자(Assignment Operators)는 등호(=)이다. 등호는 등호 오른쪽의 값을 왼쪽으로 할당한다. 파이썬에는 등호를 응용한 다양한 할당연사자가 존재한다. 그 종류는
corytips.tistory.com
글고 다음에 한거는 속성에 관한 거신데
<삼각형, 사각형 등 도형을 그린다>
여기서 고려해야할 거슨
1. 좌표 (도형이 그려질 위치)
2. 변의 길이
3. 변의 개수
class Figure:
def __init__(self, coord, length, count):
self.crd = coord
self.lgth = length
self.cnt = count
def draw(self):
x = self.crd[0]
y = self.crd[1]
msg = f'{x}, {y}좌표에 {self.cnt}개의 변을 {self.lgth}길이로 그려라'
print(msg)
# self.x, self.y = coord
f = Figure((3,5), 10, 3)
f.draw()
class Rect(Figure):
def __init__(self, coord, length):
super().__init__(coord, length, 4)
class Tri(Figure):
def __init__(self, coord, length):
super().__init__(coord, length, 3)
def draw(self):
x = self.crd[0]
y = self.crd[1]
msg = f'{x}, {y}좌표에 {self.cnt} 개의 변을 {self.lgth} 길이로 그려주세요'
print(msg)
r = Rect((10, 3), 5)
r.draw()
t = Tri((1, 4), 15)
t.draw()
먼저 Figure라는 클래스에서
도형을 그릴때 생각해야하는 3가지 개념을 정의해주고
draw함수로 그리는 것을 구현했음
ㅠㅠ 이거 내가... 했눈데 ㅠ 좌표를 표현한다는 게
좌표 자체가 2개의 변수인데
그걸 어떻게 표현하지????라는 생각을 했다
애초에 파이썬이 좌표라는 개념이 있는지 모르겠고 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
있으면(x, y) 로 그냥 표현해주면 되겟지만
그 좌표라는 개념을 컴터에게 어케알려주죠 선생님....? <--- 이생각으로 암것도 못했음 ㅋㅋㅋㅋㅋㅋ
내가 헤메니까 알려주신게
coord = (1, 2)
print(coord)
print(coord[0])
print(coord[1])
x, y = 10, 20
print(x)
print(y)
count = 10
a = f'count is {count}'
print(a)
b = 'count is {} {}'.format(11, 'name')
print(b)
class Rect():
pass
class Tri():
pass
요부분인데...
coord = (1, 2) 라고 데이터 값을 주고 출력을 하면 나오고
리스트형이기 때문에
print(coord[0]) 하면 첫번째 데이터가 출력
print(coord[1]) 하면 두번째 데이터가 출력
그리고 count = 10 정의 후
a = f'count is {count}' 정의하고
a를 출력하면 count is 10 이 출력됨.
똑같이
b=f'count is {} {}'.format(11, 'name') 이렇게하믄... {} 위치에 순서대로 11, 'name'이 출력됐음
여기에서돜ㅋㅋㅋㅋ format이라는게 갑툭튀해서
잘 이해를 못햇눈데(바로 넣어주는거라고 설명을 해주셨지만..)
와서 검색해보고 이해해따..
https://blockdmask.tistory.com/424
[python] 파이썬 format 함수 (문자열 포매팅 방법 1)
안녕하세요. BlockDMask 입니다. 파이썬에서 문자열 포매팅 방법은 %와 서식기호를 이용한 방법, format 함수를 이용한 방법, f-string을 이용한 방법 이렇게 세가지가 있다고 볼 수 있습니다. 오늘은 파
blockdmask.tistory.com
여기에서
a = f'count is {count}'
저 빨강색 f는 어디서 갑툭튀한거야... 했는데
def 처럼 그냥 있는 함수????
그냥 어휘력 같은거라서 계속 하면서 아는수밖에 없다고했음 ㅠ
기본적으로 되는 함수와 그렇지 않은것(내가 정의해줘야하는것)
그래서 다시 돌아오면
def draw(self):
x = self.crd[0]
y = self.crd[1]
msg = f'{x}, {y}좌표에 {self.cnt}개의 변을 {self.lgth}길이로 그려라'
print(msg)
# self.x, self.y = coord
draw 에서
x는 crd의 첫번째 변수이다
y는 crd의 두번째 변수이다
라는것을 정의해줬고
msg 라는 이름으로 " (x값), (y값) 좌표에 (변의개수)개의 변을 (변의길이)길이로 그려라" 라는 메세지가 나오는걸 정의하고
msg를 프린트했음
아래 주석은 self.x, self.y = coord로 정의하는 방법이 잇따고 첨에 설명해주신건데 내가 이해못햇슴 ㅎ
지금보니 알것도 같네......ㅇㅏ닝가 ㅎ
무튼 이걸로 Figure클래스 정의는 끝났고
그뒤에
사각형 Rect 클래스에 Figure클래스를 상속,
삼각형 Tri 클래스에 Figure 클래스를 상속시키는것을 했다
class Rect(Figure):
def __init__(self, coord, length):
super().__init__(coord, length, 4)
class Tri(Figure):
def __init__(self, coord, length):
super().__init__(coord, length, 3)
def draw(self):
x = self.crd[0]
y = self.crd[1]
msg = f'{x}, {y}좌표에 {self.cnt} 개의 변을 {self.lgth} 길이로 그려주세요'
print(msg)
삼각형과 사각형은 '변의 개수'가 고정인 것이므로 숫자 각각 3, 4로 고정함
근데 여기서 만약에 실행시킬때
Figure에는 3개의 값을 필요로 할테고,
Rect와 Tri는 2개의 값을 필요로 하는데
f = Figure((3,5), 10, 3) 요런식으로
'변의개수' 값을 그냥 넣고 출력하면 삼각형 사각형이 의미가 없어짐!
그래서 한거시
super().__init__(coord, length, 4)
요거인데
super()는 상속해주는? 곳을 의미하고
뜻을 풀면
super(여기에선 Figure)의 __init__을 (coord, length, 4)로 다시 써준것과 같음!
글고
사각형에서는 "~ 그려라"라고 출력을
삼각형에서는 "~ 그려주세요"라고 출력을 하기위해서
Tri 클래스에서는 draw의 x y msg를 다시 써주고 문구를 바꿔줬음!
여기에서는 일부만 쏙 바꾸는게 안되서(통으로 묶여있어서?)
똑같이 다시 써준거시다.
이걸 뭐라고했는데....리액팅? 리....라이팅?ㅋㅋ 리라이팅이 맞겟지..? 머르게다
요기까지했눈데
내가 오늘은 좀 정신이 산만했는지,,,
지난주는 막 머리에 쏙쏙 들어오는 느낌이었는데
오늘은 ㅋㅋㅋ ㅠㅠ 그런느낌은 없었다
그래두 이러케 돌아보니까 좀 이해되는거같음 !
오늘 쓴거처럼 했던거 흐름대로 적는게 기억하기 좋은거같다
알아보기
- 비쥬얼스튜디오 레이아웃 / 터미널, 파이썬대화형창, 출력창 각각 역할과 사용법
- 주석처리,해제 단축키가 검색해보면 ctrl+K+U 아니면 ctrl+/ 로 나오는데 둘다 안먹힘 ㅡㅡ 왜때문에... ㅠㅠ
- 파이썬 파일과 파이썬 소스파일은 모가다른가요 선샘미...

