728x90
- 클래스(class)
- 똑같은 무엇인가를 계속해서 만들어 낼 수 있는 설계 도면
- 클래스로 만들어 낸 피조물을 '객체'라고 함
- 객체는 고유한 성격을 가짐(동일한 클래스로 만든 객체들은 서로 전혀 영향을 주지 않음)
- 클래스 안에 구현된 함수는 매소드(mothod)라고 함
- 생성자(constructor) : 객체가 생성될 때 자동으로 호출되는 매소드, 객체에 초기값을 설정해줌
- 상속(Inheritance) : 클래스를 생성할 때 기존의 다른 클래스의 기능을 물려받을 수 있게 만드는 것
- 각 기능을 다른 파이썬 파일에 나눠 개발함으로써 코드 관리가 쉬워 생산성 향상 가능
- 클래스 활용하기 : 임의의_파이썬.py → 코랩으로 불러오기 → from 파일이름 import 클래스 명
- 객체와 인스턴스의 차이
- a = Cookie() 라고 하면 a는 객체이다.
- 그리고 a객체는 Cookie의 인스턴스이다.
- (객체는 클래스의 파생물 자체, 인스턴스는 클래스와 객체의 관계 정도로 이해하면 될 듯)
- 사칙연산 클래스 만들기
# 클래스의 구조 만들기
class FourCal :
pass
# 이 상태의 FourCal 클래스는 아무 변수나 함수를 포함하지 않지만 객체는 생성 가능
a = FourCal()
type(a)
# 객체에 숫자 지정할 수 있게 만들기 (메소드)
class FourCal :
def setdata(self, first, second) :
self.first = first
self.second = second
# 매개변수가 3개인 이유 : self의 부분에는 호출한 객체가 대입, 파이썬에서는 관례적으로 첫 번째 매개변수에 self를 넣음
# self : 실제 전달 값이 아닌 파이썬 내부에서 사용되는 약속된 값
a = FourCal()
a.setdata(4,2)
print(a.first)
print(a.second)
# 더하기 기능 만들기
class FourCal :
def setdata(self, first, second) :
self.first = first
self.second = second
def add(self) :
result = self.first + self.second
return result
a = FourCal()
a.setdata(4,2)
a.add()
# 빼기, 곱하기, 나누기 기능 만들기
class FourCal :
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()
a.setdata(4,2)
print(a.add())
print(a.sub())
print(a.mul())
print(a.div())
# 생성자 만들기
# a = FourCal()
# a.add()
# 위와 같이 setdata를 수행하지 않고 add 매소드를 수행하면 오류 발생
# 이럴 경우 객체에 초기값을 설정해준다.
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.add()
# 자동차 클래스 만들기
class Car :
# 클래스의 생성자
def __init__(self, name, color) :
self.name = name
self.color = color
# 클래스의 소멸자 : 인스턴스가 소멸되었을 때 실행
def __del__(self) :
print('인스턴스를 소멸시킵니다.')
#클래스의 메소드
def show_info(self) :
print('이름 : ', self.name, '/ 색상 : ', self.color)
# Setter 메소드 : 특정 속성 값 변경
def set_name(self, name) :
self.name = name
car1 = Car('소나타', '빨간색')
car1.show_info()
car2 = Car('아반떼', '검은색')
car2.show_info()
car1.set_name('싼타페') # car1의 이름 변경
print(car1.name, '을(를) 구매했습니다.')
del car1
- 클래스의 상속
- 기존 클래스가 라이브러리 형태로 제공되거나 수정이 허용되지 않는 상황에 사용
# 클래스 상속 : class 클래스 이름(상속할 클래스 이름)
class MoreFourCal(FourCal) :
pass
a = MoreFourCal(4,2)
a.add()
class MoreFourCal(FourCal) :
def pow(self) :
result = self.first ** self.second
return result
a = MoreFourCal(4,2)
a.pow()
# 게임을 만든다고 가정해보자!
#부모 클래스
class Unit :
def __init__(self, name, power) :
self.name = name
self.power = power
def attack(self) :
print(self.name, '이(가) 공격을 수행합니다. [전투력 :', self.power, ']')
unit = Unit('홍길동', 375)
unit.attack()
# 자식 클래스
# 해당 게임에서 몬스터 생성할 때, 이름과 전투력을 가지고 있기 때문에 Unit 상속하여 사용
class Monster(Unit) :
def __init__(self, name, power, type) :
self.name = name
self.power = power
self.type = type
def show_info(self) :
print('몬스터 이름 : ', self.name, '/ 몬스터 종류 : ', self.type)
monster = Monster('슬라임', 10, '초급')
monster.attack()
monster.show_info()
unit.show_info() # 부모 클래스에서는 자식 클래스의 메소드 사용 불가
- 매소드 오버라이딩(Over riding)
- 기존 클래스에 있는 매소드를 동일한 이름으로 다시 작성
- 부모 클래스의 매소드 대신 오버라이딩한 매소드가 호출됨
class SafeFourCal(FourCal) :
def div(self) :
if self.second == 0 :
return 0
else :
return self.first / self.second
a = SafeFourCal(4,0)
a.div()
- 클래스 변수
- 객체 변수와는 다름
- 클래스안에 선언한 변수
- 클래스로 만든 모든 객체에 공유됨
class Family :
lastname = '김'
print(Family.lastname)
a = Family()
print(a.lastname)
728x90
'PROGRAMMING > PYTHON' 카테고리의 다른 글
[Python] Numpy (0) | 2021.04.26 |
---|---|
[Python] 모듈, 패키지, 예외처리, 내장함수 (0) | 2021.04.26 |
[Python] 파일 (0) | 2021.04.26 |
[Python] 함수 (0) | 2021.04.25 |
[Python] 딕셔너리 (0) | 2021.04.25 |
댓글