🌭 똑같은 일(과자 틀)을 하는, 2개 이상의 독립적인 객체(과자)를 만들기 위해 사용
>>> class Cookie: # Cookie가 클래스
>>> pass
>>> a = Cookie() # a, b가 객체
>>> b = Cookie()
🍔 객체와 인스턴스의 차이
a = Cookie()
- a는 객체
- a 객체는 Cookie의 인스턴스 (관계 위주의 설명)
** 'a는 Cookie의 객체' 보다는 'a는 Cookie의 인스턴스'라는 표현이 잘 어울림.
아래와 같이 동작하는 FourCal 클래스 만드는 것이 목표!
a = FourCal() # a라는 객체 생성
a.setdata(4, 2) # 숫자 4와 2를 a에 지정
a.add() # 두 수를 합한 결과 반환
a.mul() # 두 수를 곱한 결과 반환
a.sub() # 두 수를 뺀 결과 반환
a.div() # 두 수를 나눈 결과 반환
>>> class FourCal:
pass # pass는 아무것도 수행하지 않는 문법으로, 임시로 코드 작성 시 사용
>>> a = FourCal() # a 객체 생성
🌭 a. setdata(4, 2)
>>> class FourCal:
... def setdata(self, first, second): # 메서드의 매개변수
... self.first = first # 메서드의 수행문
... self.second = second # 메서드의 수행문
메서드(method)
: 클래스 안에 구현된 함수 (ex. setdata)
파이썬 메서드의 첫 번째 매개변수 이름은 관례적으로 self
를 사용
self
말고 다른 이름을 사용해도 상관 없지만, 항상 객체 자신을 자동 호출
def setdata(self, first, second):
self.first = first
self.second = second
a.setdata(4, 2)
>>> self -> a, first -> 4, second -> 2
🥨 클래스를 통한 메서드 호출 방법
>> a = FourCal() >> FourCal.setdata(a, 4, 2)
def setdata(self, first, second):
self.first = first
self.second = second
a.setdata(4, 2)
>>> print(a.first)
4
>>> print(a.second)
2
🥨 객체변수: 객체에 생성되는 객체만의 변수
a.first = 4 a.second = 2
a 객체에 객체변수 first 생성되고 값 4 저장
>>> 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
>>> a = FourCal()
>>> a.add()
# 오류 발생 (setdata를 수행하지 않아서 객체 a의 객체변수가 생성되지 않았기 때문)
🥨 객체에 초깃값 설정이 필요할 때, setdata 같은 메서드를 직접 호출하여 초깃값을 설정하는 것보다 생성자를 구현하는 것이 안전
>>> class FourCal:
def __init__(self, first, second): # setdata 대신 __init__으로 이름 설정
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
>>> a = FourCal()
# 오류발생! 매개변수 first, second에 해당하는 값이 전달되지 않았기 때문
>>> a = FourCal(4, 2)
>>> a.add()
6
🌭 어떤 클래스를 만들 때, 다른 클래스의 기능을 물려받을 수 있게 만드는 것
>>> class MoreFourCal(FourCal): # FourCal 클래스를 상속하는 MoreFourCal 생성
pass
🥨 왜 상속을 해야 하는가
기존 클래스를 변경하지 않고, 기능을 추가하거나 기존 기능을 변경하고자 할때 사용
# Fourcal의 모든 기능을 상속받고, pow 메서드 추가
>>> 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
# FourCal 클래스의 div 메서드가 아닌, SafeFourCal의 div 메서드가 호출됨
🌭 클래스 안에 변수를 선언하여 생성
>>> class Family:
lastname = "김"
>>>print(Family.lastname)
김
** 클래스 변수는 모든 객체에 공유됨 (모든 객체의 동일한 클래스 변수는 동일한 id를 가짐)
아래 내용을 바탕으로 정리한 것이다.
점프투파이썬 (https://wikidocs.net/28)