List
- 파이썬 날개달기
- 클래스(class)
- 모듈(module)
- 패키지(package)
- 예외처리(exception)
- 내장함수
- 라이브러리(library)
- 연습문제
result = 0
def add(num):
global result # 이전에 계산한 결괏값을 유지하기 위해서 전역변수인 global을 사용
result += num # result = result + num 이다.
return result
print(add(3))
print(add(4))
**위의 add 함수는 매개변수 num에 받은 값을 이전에 계산한 결괏값에 더한 후 돌려주는 함수이다.
result1 = 0
result2 = 0
def add1(num):
global result1
result1 += num
return result1
def add2(num):
global result2
result2 += num
return result2
print(add1(3))
print(add1(4))
print(add2(3))
print(add2(7))
class Calculator:
def __init__(self): # 이게 이해가 안되네..
self.result = 0
def add(self, num):
self.result += num
return self.result
cal1 = Calculator()
cal2 = Calculator()
print(cal1.add(3)) # 객체 1
print(cal1.add(4)) # 객체 2
print(cal2.add(3))
print(cal2.add(7))
**계산기 대수가 늘어도 객체를 추가하면 되는거라 아주 쉽다 쉬워.
**뺴기 기능을 추가하려면 아래와 같은 함수를 추가하면 된다.
def sub(self, num):
self.result -= num
return self.result
>>> class Cookie:
>>> pass
>>> a = Cookie()
>>> b = Cookie()
** Cookie()의 결괏값을 돌려받은 a와 b가 바로 객체이다.
***객체와 인스턴스의 차이
- 둘은 동일하지만 사용법이 조금 다름
- a 는 ‘객체’이며,
- a 는 Cookie의 ‘인스턴스’이다
>>> a = FourCal()
>>> a.setdata(4, 2)
>>>class FourCal:
def setdata(self, first, second): # ① 메서드의 매개변수
self.first = first # ② 메서드의 수행문
self.second = second # ② 메서드의 수행문
setdata 메서드에
는 self
, first
, second
총 3개의 매개변수가 필요한데 실제로는 a.setdata(4, 2)
처럼 2개 값(4, 2)
만 전달했다.a.setdata(4, 2)
처럼 호출하면 setdata 메서드
의 첫 번째 매개변수 self에는 setdata메서드를 호출한 객체 a가 자동으로 전달된다.self
를 사용하며, 물론 다른 이름사용해도 된다.>>> a = FourCal()
>>> a.setdata(4, 2)
>>> print(a.first)
4
>>> b = FourCal()
>>> b.setdata(3, 7)
>>> print(b.first)
3
>>> print(a.first) # a 객체의 first 값은 b 객체의 first 값에 영향받지 않고 원래 값을 유지
4
다른 형태로 매소드 호출하기
클래스 이름.함수(a,b,c)
형태로 호출할 때는 객체 a에 첫 번째 매개변수 self를 꼭 전달해 주어야 한다.>> a = FourCal() >> FourCal.setdata(a, 4, 2)
class FourCal:
def setdata(self, first, second):
self.first = first
self.second = second
def add(self): # add메서드의 매개변수는 self
result = self.first + self.second # result = a.first + a.second
return result # 반환값은 result
>>> a = FourCal()
>>> a.setdata(4, 2)
>>> print(a.add())
6
class FourCal: # a = FourCal()
def setdata(a, 4, 2): # a.setdata(4, 2)
a.4 = 4
a.2 = 2
def add(self):
6 = 4(=a.4) + 2(=a.2)
return 6
>>> a = FourCal()
>>> a.setdata(4, 2)
>>> print(a.add())
6
__init__
객체에 초깃값을 설정해야 할 필요가 있을 떄 setdata
와 같은 메서드를 호출해서 초깃값을 설정하는것 보다는 생성자를 구현하는게 안전하다.
def setdata
를 사용했을 때>>> a = FourCal()
>>> a.setdata(4, 2) # 먼저 초깃값을 세팅해 놓아야함
생성자(constructor)
를 사용했을 떄>>> a = FourCal(4, 2) # 객체 생성시 자동으로 호출 시킴
>>> print(a.first)
4
>>> print(a.second)
2
기존 클래스의 기능을 다른 클래스의 이름으로 물려받게 하는 것
보통 상속은 기존 클래스를 변경하지 않고 기능을 추가하거나 기존 기능을 변경하려고 할 때 사용한다.
기본 구조class
클래스 이름``(상속할 클래스 이름)
>>> class MoreFourCal(FourCal):
FourCal
클래스의 사칙연산 기능에 제곱 기능 추가>>> class MoreFourCal(FourCal):
def pow(self):
result = self.first ** self.second
return result
클래스의 상속과 거의 똑같음
하지만 상속했을 때 기존 클래스에 있던 메서드를 동일한 이름으로 다시 만드는 것(수정해 주는것)이라고 생각하면됨
>>> class SafeFourCal(FourCal):
def div(self):
if self.second == 0: # 나누는 값이 0인 경우 0을 리턴하도록 수정
return 0
else:
return self.first / self.second
>>> a = SafeFourCal(4, 0)
>>> a.div()
0
클래스이름. 클래스변수
>>> class Family:
lastname = "김"
>>>print(Family.lastname)
김
>>> a = Family()
>>> b = Family()
>>> print(a.lastname)
김
>>> print(b.lastname)
김
>>> Family.lastname = "박"
>>> print(a.lastname)
박
>>> print(b.lastname)
박