중급4 복습 (자주 사용하는 모듈 ~ 객체 속성 변경)
‣ 파이썬에서 기본 제공해주는 math, random, time 모듈을 자주 사용한다.
‣ 수학, 난수, 시간 모듈은 잘 활용하면 편하다.
#math, random, time 을 자주 사용한다.
#math -> sum, max, min, pow(제곱), round(반올림)
listVar = [2, 5, 3.14, 58, 10, 3]
print(f'pow(13,2): {pow(13, 2)}') #제곱할수, 제곱 수
print(f'pow(13,3): {pow(13, 3)}')
print(f'pow(13,4): {pow(13, 4)}')
print(f'{round(3.141592, 1)}') #반올림할 수, 소수점 단위
print(f'{round(3.141592, 2)}')
print(f'{round(3.141592, 3)}')
print(f'{round(3.141592, 4)}')
print(f'{round(3.141592, 5)}')
import math
#절대값
print(f'math.fabs(-10): {math.fabs(-10)}')
print(f'math.fabs(-0.12895): {math.fabs(-0.12895)}')
#내림
print(f'math.floor(5.21): {math.floor(5.21)}')
print(f'math.floor(-5.21): {math.fabs(-5.21)}')
#버림
print(f'math.trunc(5.21): {math.trunc(5.21)}')
print(f'math.trunc(-5.21): {math.trunc(-5.21)}')
#팩토리얼
print(f'math.factorial(10): {math.factorial(10)}')
#제곱근
print(f'math.sqrt(4): {math.sqrt(4)}')
print(f'math.sqrt(18): {math.sqrt(18)}')
import time
lt = time.localtime()
print(f'time.localtime(): {lt}')
print(f'lt.tm_year: {lt.tm_year}')
print(f'lt.tm_mon: {lt.tm_mon}')
print(f'lt.tm_mday: {lt.tm_mday}')
print(f'lt.tm_hour: {lt.tm_hour}')
print(f'lt.tm_min: {lt.tm_min}')
print(f'lt.tm_sec: {lt.tm_sec}')
print(f'lt.tm_wday: {lt.tm_wday}') #요일을 나타낸다.
Random은 워낙 많이 사용하고 쉽기 때문에 넘기고, 다양한 연산과 math, time에 대해 정리했다.
‣ 객체를 이용한 프로그램으로 객체는 속성과 기능으로 구성된다.
‣ 만약 자동차(Car)라면 속성(길이, 색상, 가격 등)과 기능(전진, 후진, 정지 등)으로 나눌 수 있다.
‣ 객체(Object) = 속성(Attribute) + 기능(Function) 으로 볼 수 있다.
‣ 객체는 클래스에 생성된다.
‣ 코드 재사용, 모듈화에 좋다.
‣ 객체를 생성하기 위해 클래스 만들기
‣ 클래스명은 함수와 다르게 첫글자를 대문자로 만든다. (Ex. class Car)
‣ 속성은 init메소드를 넣어야한다.
‣ init 뒤에 (나 자신이라는 의미의 self, 속성, 속성들)을 선언하고,
‣ 선언한 속성들을 초기화한다.
class Car:
def __init__(self, col, len): #self는 나 자신. Car를 지목한다.
self.color = col #객체가 생성될 때 객체의 속성을 초기화.
self.length = len
def doStop(self): #정지하는 기능, 클래스 안의 특정한 기능은 매개변수로 self로 받아야한다.
print('STOP!!')
def doStart(self):
print('STRART!!') #여기까지 만들고 실행하면 결과값이 나오지 않는다.
def printCarInfo(self):
print(f'self.color: {self.color}')
print(f'self.length: {self.length}')
#클래스는 객체를 만들기 위한 녀석일뿐 객체를 만들고 실행하야한다.
#객체 생성
car1 = Car('red', 200) #class명과 동일
car2 = Car('blue', 300) #레퍼런스 변수들.
car1.printCarInfo()
car2.printCarInfo()
car1.doStop()
car1.doStart()
클래스의 기본 예제이다.
1. 클래스명의 첫글자는 대문자! Car
2. class 자신을 의미하므로 self, 속성인 color 와 length를 매개변수로 받고 초기화.
3. 각 기능들을 함수처럼 선언해준다.
4. 실행할 땐 클래스명과 동일하게 호출해서 인순허고 돌린다.
class Flight:
def __init__(self, color, length, arrival): #속성들
self.color = color
self.length = length
self.arrival = arrival
def doTakeOff(self): #기능들
print('Take-Off!!')
def doLanding(self):
print('Landing~~')
def doAutoPilot(self):
print('Auto-Pilot Mode.')
def printFlightInfo(self):
print(f'self.color: {self.color}')
print(f'self.length: {self.length}')
print(f'self.arrival: {self.arrival}')
flight1 = Flight('white', 150, 'seoul')
flight2 = Flight('blue', 200, 'dokdo')
flight3 = Flight('green', 3000, 'USA')
flight1.printFlightInfo()
flight1.doTakeOff()
flight1.doAutoPilot()
flight1.doLanding()
flight2.printFlightInfo()
flight2.doTakeOff()
flight2.doAutoPilot()
flight2.doLanding()
flight3.printFlightInfo()
flight3.doTakeOff()
flight3.doAutoPilot()
flight3.doLanding()
비슷하게 비행기로 짠 예제.
1. 색상과 길이, 목적지를 속성을 받았고,
2. 초기화 한 후 동작들(이륙, 오토파일럿모드, 착륙)을 객체로 선언.
3. 비행기의 속성들을 한눈에 보여주는 flightInfo도 추가
‣ 객체 속성은 변경할 수 있다. like) PC사양 업그레이드 하듯이.
class NewGenerationPC:
def __init__(self, name, cpu, memory, ssd):
self.name = name #앞의 name은 객체에 속해있는 속성, 뒤의 name은 매개변수
self.cpu = cpu
self.memory = memory
self.ssd = ssd
def doExcel(self):
print('Excel Run!!')
def doPhotochop(self):
print('Photoshop Run!!')
def printPCInfo(self):
print(f'self.name: {self.name}')
print(f'self.cpu: {self.cpu}')
print(f'self.memory: {self.memory}')
print(f'self.ssd: {self.ssd}')
myPC = NewGenerationPC('myPC', 'i5', '16G', '256G')
myPC.printPCInfo()
friendPC = NewGenerationPC('friendPC', 'i9', '32G', '1T')
friendPC.printPCInfo()
#myPC 객체 속성 변경 부분.
myPC.cpu = 'i9'
myPC.memory = '64G'
myPC.ssd = '8T'
myPC.printPCInfo()
Car, Flight 하듯이 똑같이 선언 실행해주니 내PC와 친구PC가 나온다.
1. 내PC를 업그레이드 하기 위해 속성을 변경한다.
2. 쉽게 생각해서 각 속성을 하나씩 바꿔주면 된다.
3. myPC.cpu = 'i9', myPC.ssd = '8T' 같이
4. 그리고 다시 Info를 출력해보면 기존 내PC와 함꼐 변경된 속성의 내PC가 나온다.
Calculator로 만든 예제
class Calculator:
def __init__(self):
self.number1 = 0
self.number2 = 0
self.result = 0
def add(self):
self.result = self.number1 + self.number2
return self.result
def sub(self):
self.result = self.number1 - self.number2
return self.result
def mul(self):
self.result = self.number1 * self.number2
return self.result
def div(self):
self.result = self.number1 / self.number2
return self.result
calculator = Calculator()
calculator.number1 = 10
calculator.number2 = 20
print(f'calculator.add(): {calculator.add()}')
print(f'calculator.sub(): {calculator.sub()}')
print(f'calculator.mul(): {calculator.mul()}')
print(f'calculator.div(): {calculator.div()}')
calculator.number1 = 4
calculator.number2 = 6
print(f'calculator.add(): {calculator.add()}')
print(f'calculator.sub(): {calculator.sub()}')
print(f'calculator.mul(): {calculator.mul()}')
print(f'calculator.div(): {calculator.div()}')
강의 마지막에 강사님이 내주신 예제
1. class의 매개변수가 없다... 답을 보기 전까지 어떻게 해야할지 몰랐다.
2. 매 기능마다 result 값을 return하는 식으로 짠다.
3. 실행단에서 그냥 클래스를 호출한 후,
4. 매개변수를 따로 입력해야한다.
★ 어려웠던 점 ★
1. init이 정확히 무슨 역할을 하는지 이해하지 못했다.
⇨ 이렇게 함수부분, 실행부분을 잘 나눌줄 알아야 효율적인 코드를 짤 수 있다는 얘기를 보았는데 아직 머릿솔에서는 한화면에 코드를 짜내야 한다는 강박(?) 같은게 있어서 구분이 안되는 것 같다. 이런 형태의 코드를 많이 보다보면 지금까지 해온것 처럼 익숙해져야할 것 같다...
매개변수가 없는 클래스의 실행 과정이 어떻게 되는지 모르겠다.(calculator)
⇨ 실행단에서 각 매개변수의 인수를 선언해주어야한다.
그 와중에 속성 변경도 가능하다.