1. 클래스와 객체
- 클래스(class): 무엇인가를 계속해서 만들어 낼 수 있는 설계 도면(과자 틀)
- 객체(object): 클래스로 만든 피조물(과자 틀을 사용해 만든 과자)
- 객체마다 고유의 성격을 가진다. 동일한 클래스로 만들어도 객체들은 서로 전혀 영향을 주지 않는다.
* 객체와 인스턴스의 차이
- 인스턴스라는 말은 특정 객체(a)가 어떤 클래스(Cookie)의 객체인지를 관계 위조로 설명할 때 사용한다.
Class Cookie:
pass
a = Cookie()
- 'a'는 객체, 'a는 Cookie의 인스턴스'
- 메서드(Method): 클래스 안에서 구현된 함수.
- 메서드도 클래스에 포함되어 있다는 점만 제외하면 일반 함수와 다를 것이 없다.
2. 객체 만들기
class FourCal:
def setdata(self, first, second):
self.first = first
self.second = second
a = FourCal()
a.setdata(4, 2)
- a.setdata(4, 2)처럼 호출하면 setdata 메서드의 첫 번째 매개변수 self에는 setdata메서드를 호출한 객체 a가 자동으로 전달된다.
- 객체를 호출할 때 호출한 객체 자신이 전달되는 것.
a = FourCal()
FourCal.setdata(a, 4, 2)
이렇게 메서드 호출도 가능. 단, '클래스 이름.메서드' 형태로 호출할 때는 객체 a를 첫 번째 매개변수 self에 꼭 전달해주어야 한다. (잘 사용하지는 않음.)
사칙연산 계산기
class FourCal:
def setdata(self, first, second):
self.first = first
self.second = second
def add(self):
result = self.first + self.second
return result
def mul(self):
result = self.first * self.second
return result
def sub(self):
result = self.first - self.second
return result
def div(self):
result = self.first / self.second
return result
3. 생성자(Constructor)
- 객체에 초깃값을 설정해야 할 때는 setdata와 같은 메서드를 호출하여 설정하기 보다는 생성자를 구현하는 것이 안전한 방법.
- 생성자: 객체가 생성될 때 자동으로 호출되는 메서드.
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 mul(self):
result = self.first * self.second
return result
def sub(self):
result = self.first - self.second
return result
def div(self):
result = self.first / self.second
return result
4. 클래스의 상속
class 클래스 이름(상속할 클래스 이름)
- 보통 상속은 기존 클래스를 변경하지 않고 기능을 추가하거나 기존 기능을 변경하려고 할 때 사용.
- 기존 클래스가 라이브러리 형태로 제공되거나 수정이 허용되지 않는 상황이라면 상속을 사용해야 함.
a의 b제곱(aᵇ)을 계산하는 MoreFourCal 클래스
class MoreFourCal(FourCal):
def pow(self):
result = self.first ** self.second
return result
상속은 MoreFourCal 클래스처럼 기존 클래스(FourCal)는그대로 놔둔 채 클래스의 기능을 확장시킬 때 주로 사용.
✔︎ 메서드 오버라이딩
- 메서드 오버라이딩(Overriding, 덮어쓰기): 부모 클래스(상속한 클래스)에 있는 메서드를 동일한 이름으로 다시 만드는 것.
- 메서드를 오버라이딩하면 부모 클래스의 메서드 대신 오버라이딩한 메서드가 호출된다.
나누는 값이 0인 경우 숫자 0을 돌려주도록 수정
class SafeFourCal(FourCal):
def div(self):
if self.second == 0:
return 0
else:
return self.first / self.second
'◦ Algorithm > Python' 카테고리의 다른 글
이코테 부록 정리 - 자료형 (0) | 2023.03.18 |
---|---|
코드업 파이썬 기초100제 정리 (0) | 2023.03.18 |
[점프투파이썬] 함수, 사용자 입출력 (0) | 2021.01.29 |
[점프투파이썬] 집합, 불, 변수 (0) | 2021.01.28 |
[점프투파이썬] 리스트, 튜플, 딕셔너리 (0) | 2021.01.26 |