1. 클래스
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(add2(3))
* 위의 코드는 계산기 프로그램
* 함수로 두 개의 계산기를 만들었는데, 10개의 계산기를 만들기 위해 함수 10개가 필요함??
* 이를 해결하기 위한 것이 "클래스"
* 클래스 안에서 구현된 함수는 함수라고 하지 않고 메서드라고 함
1) 클래스는 왜 필요한가?
- 반복되는 변수나 메서드(함수)를 미리 정해놓은 틀(설계도)
############ 위의 함수를 클래스로 묶어 계산기 만듦 ##############
class Calculator:
def __init__(self):
self.result = 0
def add(self, num):
self.result += num
return self.result
def sub(self, num):
self.result -= num
return self.result
cal1 = Calculator()
cal2 = Calculator()
cal3 = Calculator() # 계속해서 계산기를 만들 수 있음(클래스 장점)
print(cal1.add(3))
print(cal1.add(4))
print(cal2.add(3))
print(cal2.add(7))
print(cal3.sub(4))
2) 클래스 쓰는 방법
- class 입력
- 대문자로 시작하는 클래스 이름 작성
- 안에 들어갈 함수와 변수 설정
3) 클래스(class)와 객체(object)
- 클래스: 똑같은 무엇인가를 계쏙해서 만들어 낼 수 있는 설계 도면
- 객체: 클래스로 만든 피조물
- ex) 과자 틀(클래스)과 이 틀로 찍어 만든 과자(객체)
4) pass
- 아무 기능이 없는 껍질뿐인 클래스도 객체 생성이 가능
class Cookie:
pass
a = Cookie()
b = Cookie()
- a = Cookie(): a는 객체
- a 객체는 Cookie의 인스턴스
5) 생성자
class class_name:
def __init__(self):
# 이 부분에 초기화할 코드 입력
- 인스턴스를 생성하면서 필드값을 초기화 시키는 함수
- 기본 형태: __init__()
- 프로그램을 작성 시 이 이름을 사용해서 새로운 함수나 변수명을 만들지 말 것
2. 클래스를 이용하여 계산기 만들기
* 사칙연산이 모두 가능한 계산기
** 클래스 안에 구현된 함수를 메서드(method) 라고 부름
** setdata 메서드의 입력 인수는 self, first, second라는 3개의 입력값을 받음
** set 메서드의 첫 번째 인수에는 자동으로 a라는 인스턴스가 입력으로 들어가게 됨
class FourCal:
def __init__(self, first, second):
self.first = first
self.second = second
def setdata(self, first, second):
self.first = first
self.second = second
def add(self):
result = self.first + self.second
return result
def sub(self):
result = self.first - self.second
return result
def mul(self):
result = self.first * self.second
return result
def div(self):
result = self.first / self.second
return result
a = FourCal(4, 2) # a는 setdata, add를 가지고 있음
print(a.add())
print(a.first)
print(a.second)
print(a.sub())
print(a.mul())
print(a.div())
1) 클래스의 상속
- 물려받다
##### 위 코드 상속 #####
class MoreFourCal(FourCal):
pass
a = MoreFourCal(4, 2)
print(a.add())
- 어떤 클래스를 만들 때 다른 클래스의 기능을 물려받을 수 있게 만드는 것
** FourCal 클래스를 상속하는 MoreFourCal 클래스
###### 제곱 ######
class MoreFourCal(FourCal):
def pow(self):
result = self.first ** self.second
return result
a = MoreFourCal(4, 2)
print(a.pow())
- 상속하는 클래스에 pass 뿐만 아니라 새로운 연산이 필요한 경우, 함수를 만들 수 있음
2) 메서드 오버라이딩(Overriding)
- 상속받을 대상인 클래스의 메서드와 이름은 같지만, 그 행동을 다르게 해야 할 때 메서드 이름을 동일하게 다시 구현하는 것
- 상위 클래스의 메서드를 서브 클래스에서 재정의
** FourCal 클래스의 객체 a에 4와 0 값을 설정하고 div 메서드를 호출하면 4/0 오류 발생
** 오류가 아닌 0을 돌려주도록 만들고 싶다면 FourCal 클래스를 상속하는 SafeFourCal 클래스를 만듦
###### 메서드 오버라이딩 #####
class SafeFourCal(FourCal):
def div(self):
if self.second == 0:
return 0
else:
return self.first / self.second
a = SafeFourCal(4, 0)
print(a.div())
'데이터분석' 카테고리의 다른 글
[23.06.13] Python Series, DataFrame - 08(3) (0) | 2023.06.13 |
---|---|
[23.06.13] Python 클래스 - 08(2) (0) | 2023.06.13 |
[23.06.12] Python Series, DataFrame 문제 - 07(5) (0) | 2023.06.12 |
[23.06.12] Python Series, DataFrame - 07(4) (0) | 2023.06.12 |
[23.06.12] Python pandas - 07(3) (0) | 2023.06.12 |