예시) - addModule.py
def add(n1, n2):
return n1 + n2
if __name__ == '__main__':
print(f'__name__ : {__name__}')
# 수학 관련 함수
# 합
listVar = [2, 5, 3.14, 58, 10, 2]
print(f'sum(listVar) = {sum(listVar)}')
# 최댓값
listVar = [2, 5, 3.14, 58, 10, 2]
print(f'max(listVar) = {max(listVar)}')
# 최솟값
listVar = [2, 5, 3.14, 58, 10, 2]
print(f'min(listVar) = {min(listVar)}')
# 거듭제곱
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)}')
import math
# 절댓값
print(f'math.fabs(-10) : {math.fabs(-10)}')
print(f'math.fabs(-0.12895) : {math.fabs(-0.12895)}')
# 올림
print(f'math.ceil(5.21) : {math.ceil(5.21)}')
print(f'math.ceil(-5.21) : {math.ceil(-5.21)}')
# 내림
print(f'math.floor(5.21) : {math.floor(5.21)}')
print(f'math.floor(-5.21) : {math.floor(-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.gcd(14, 21) : {math.gcd(14, 21)}')
# 팩토리얼
print(f'math.factorial(10) : {math.factorial(10)}')
# 제곱근
print(f'math.sqrt(4) : {math.sqrt(4)}')
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_day : {lt.tm_mday }')
print(f'lt.tm_wday : {lt.tm_wday }')
print(f'lt.tm_hour : {lt.tm_hour }')
print(f'lt.tm_min : {lt.tm_min }')
print(f'lt.tm_sec : {lt.tm_sec }')
객체를 이용한 프로그램으로, 객체는 속성과 기능으로 구성됨
클래스에서 생성됨
이름의 첫 단어는 대문자!
class 키워드와 속성(변수), 그리고 기능(함수)으로 구성됨
객체는 클래스의 생성자를 호출함
실습 예제) 계산기 클래스를 만들고 사칙연산을 실행해 보자.
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
inputNum = Calculator()
inputNum.number1 = int(input('첫 번째 숫자 : '))
inputNum.number2 = int(input('두 번째 숫자 : '))
print(f'덧셈 : {inputNum.add()}')
print(f'뺄셈 : {inputNum.sub()}')
print(f'곱셈 : {inputNum.mul()}')
print(f'나눗셈 : {inputNum.div()}')
class TmpCls:
def __init__(self, n, s):
self.number = n
self.str = s
def printClsInfo(self):
print(f'self.number: {self.number}')
print(f'self.str: {self.str}')
tc1 = TmpCls(10, 'Hello')
tc2 = tc1
tc1.printClsInfo()
tc2.printClsInfo()
tc2.number = 3.14
tc2.str = 'bye'
tc1.printClsInfo()
tc2.printClsInfo()
import copy
class TmpCls:
def __init__(self, n, s):
self.number = n
self.str = s
def printClsInfo(self):
print(f'self.number: {self.number}')
print(f'self.str: {self.str}')
tc1 = TmpCls(10, 'Hello')
tc2 = copy.copy(tc1)
tc1.printClsInfo()
tc2.printClsInfo()
tc2.number = 3.14
tc2.str = 'bye'
tc1.printClsInfo()
tc2.printClsInfo()
# 강의 내용 중 얕은 복사 & 깊은 복사
# 얕은 복사
import copy
scores = [9, 8, 5, 7, 6, 10]
scoresCopy = []
scoresCopy = scores
print(f'id(scores): {id(scores)}')
print(f'id(scoresCopy): {id(scoresCopy)}')
# 같은 주소를 가리키고 있음을 확인
#깊은 복사 - append
for s in scores:
scoresCopy.append(s)
print(f'id(scores): {id(scores)}')
print(f'id(scoresCopy): {id(scoresCopy)}')
# 다른 주소를 가리키고 있음을 확인
# 다른 방식의 깊은 복사 (1) - extend
scoresCopy.extend(scores)
# 다른 방식의 깊은 복사 (2) - copy
scoresCopy = scores.copy()
# 다른 방식의 깊은 복사 (3) - 슬라이싱
scoresCopy = scores[:]
print(f'id(scores): {id(scores)}')
print(f'id(scoresCopy): {id(scoresCopy)}')
class CalculatorSuper:
def add(self, n1, n2):
return n1 + n2
def sub(self, n1, n2):
return n1 - n2
class CalculatorChild(CalculatorSuper):
def mul(self, n1, n2):
return n1 * n2
def div(self, n1, n2):
return n1 / n2
cal = CalculatorChild()
print(f'cal.add(10, 20): {cal.add(10, 20)}')
print(f'cal.sub(10, 20): {cal.sub(10, 20)}')
print(f'cal.mul(10, 20): {cal.mul(10, 20)}')
print(f'cal.div(10, 20): {cal.div(10, 20)}')
객체가 생성될 때, 생성자를 호출하면 __init__()가 자동 호출됨
__init__()가 속성을 초기화함
상위 클래스의 속성을 초기화하기 위해 super()을 이용
class MidExam:
def __init__(self, s1, s2, s3):
print('[MidExam] __init__() called!!')
self.mid_kor_score = s1
self.mid_eng_score = s2
self.mid_math_score = s3
def printScores(self):
print(f'mid_kor_score: {self.mid_kor_score}')
print(f'mid_eng_score: {self.mid_eng_score}')
print(f'mid_math_score: {self.mid_math_score}')
class EndExam(MidExam):
def __init__(self, s1, s2, s3, s4, s5, s6):
print('[EndExam] __init__() called!!')
super().__init__(s1, s2, s3)
self.end_kor_score = s4
self.end_eng_score = s5
self.end_math_score = s6
def printScores(self):
# 빼먹지 말기!
super().printScores()
print(f'end_kor_score: {self.end_kor_score}')
print(f'end_eng_score: {self.end_eng_score}')
print(f'end_math_score: {self.end_math_score}')
def getTotalScore(self):
total = self.mid_kor_score + self.mid_eng_score + self.mid_math_score
total += self.end_kor_score + self.end_eng_score + self.end_math_score
return total
def getAverageScore(self):
return self.getTotalScore() / 6
exam = EndExam(85, 90, 88, 75, 85, 95)
exam.printScores()
print(f'Total : {exam.getTotalScore()}')
print(f'Average : {round(exam.getAverageScore(), 2)}')
class BasicCalculator:
def add(self, n1, n2):
return n1 + n2
def sub(self, n1, n2):
return n1 - n2
def mul(self, n1, n2):
return n1 * n2
def div(self, n1, n2):
return n1 / n2
class DeveloperCalculator:
def mod(self, n1, n2):
return n1 % n2
def flo(self, n1, n2):
return n1 // n2
def exp(self, n1, n2):
return n1 ** n2
class Calculator(BasicCalculator, DeveloperCalculator):
def __int__(self):
pass
cal = Calculator()
print(f'cal.add(10, 20): {cal.add(10, 20)}')
print(f'cal.sub(10, 20): {cal.sub(10, 20)}')
print(f'cal.mul(10, 20): {cal.mul(10, 20)}')
print(f'cal.div(10, 20): {cal.div(10, 20)}')
print(f'cal.mod(10, 20): {cal.mod(10, 20)}')
print(f'cal.flo(10, 20): {cal.flo(10, 20)}')
print(f'cal.exp(10, 20): {cal.exp(10, 2)}')
문법적인 문제는 없으나 실행 중 발생하는 예상치 못한 문제
예외 관련 클래스는 Exception 클래스를 상속함
이상 데이터 취업 스쿨 Chpt.3 파이썬 중급의 저번 진도 이후의 스터디노트이다
여전히 진도를 따라잡는 중이며, 클래스 이후로 계속 어려움이 존재한다.
마음은 조급하나 할 것은 많다는 부분이 더욱 힘들게 한다.
빨리 익숙해져 좋은 결과를 냈으면 좋겠다는 마음이 든다.
이미지 출처: @waterglasstoon, 제로베이스 강의 일부