[Python] 6. 클래스
[Python] 6. 클래스
1. class (클래스)
1) class (클래스)
- 객체이름 = 클래스이름()
- 클래스의 속성 = 일반적인 변수
# 클래스
# 객체이름 = 클래스이름()
# 클래스의 속성 = 일반적인 변수
class BreadMold:
category = "크림빵" # 속성 추가
bread = BreadMold
bread.price = 3000
bread_choco = BreadMold()
bread_choco.category = "초코 크림빵"
# 참조연산자 (.)
print("{}의 가격은 {}입니다.".format(bread.category, bread.price))
print(bread_choco.category)
# result
크림빵의 가격은 3000입니다.
초코 크림빵
- 함수를 이용한 클래스
# 클래스
# 함수 이용
# 클래스 안에 함수 = 메서드
class BreadMold:
category = "크림빵" # 속성 추가
def make_bread(self): # self 키워드를 이용
print("빵을 만들어 냅니다.")
bread = BreadMold()
bread.make_bread()
# reslut
빵을 만들어 냅니다.
2) object (객체)
- Python 공식홈페이지 > documentation > Python Docs > Library Reference > Built-in Functions
# 클래스
# int(), str(), float(), bool(), tuple(),... type()
number = 1
# 1 데이터는 int형의 인스턴스(객체)
text = "a"
numbers = (1, 2, 3, 4)
print(type(number))
print(type(text))
print(type(numbers))
# result
<class 'int'>
<class 'str'>
<class 'tuple'>
3) 네임스페이스, 생성자/소멸자, 상속 이해하기
- 네임스페이스 (이름공간)
class BreadMold:
category = "빵"
bread1 = BreadMold()
bread2 = BreadMold()
bread3 = BreadMold()
bread1.price = 3000
bread2.category = "붕어빵"
bread3.category = "잉어빵"
print(bread1.category, bread1.price, bread2.category, bread3.category)
# result
빵 3000 붕어빵 잉어빵
= dir() 함수 = 이름공간에 있는 모든 속성을 리스트로 반환
class BreadMold:
category = "빵"
bread1 = BreadMold()
bread2 = BreadMold()
bread3 = BreadMold()
bread1.price = 3000
bread2.category = "붕어빵"
bread3.category = "잉어빵"
# dir()
print(dir(bread1))
print(dir(bread2))
print(dir(BreadMold))
# result
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'category', 'price']
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'category']
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'category']
- 생성자
# 생성자
# __init__ 생성자 메서드
# __del__ 소멸자 메서드
# 빵에 가격 정해서 팔기
class BreadMold:
category = "빵"
def __init__(self, category, price):
self.category = category
self.price = price
print("빵을 만들었습니다.")
def __del__(self):
print("빵이 사라졌습니다.")
bread1 = BreadMold("붕어빵", 3000)
print("{}의 가격은 {}원 입니다.".format(bread1.category, bread1.price))
bread2 = BreadMold("잉어빵", 4000)
print("{}의 가격은 {}원 입니다.".format(bread2.category, bread2.price))
bread2 = BreadMold("빵", 1000)
print("{}의 가격은 {}원 입니다.".format(bread2.category, bread2.price))
# result
빵을 만들었습니다.
붕어빵의 가격은 3000원 입니다.
빵을 만들었습니다.
잉어빵의 가격은 4000원 입니다.
빵을 만들었습니다.
빵이 사라졌습니다.
빵의 가격은 1000원 입니다.
빵이 사라졌습니다.
빵이 사라졌습니다.
- 상속
- super, 부모
- sub, 자식
- 재정의(override) 가능, 자식 클래스 고유의 새로운 속성 부여 가능
# 상속
class ParentRestaurant:
price = 15000
def __init__(self, name, menu, recipe):
self.name = name
self.menu = menu
self.recipe = recipe
def __str__(self):
return "가게 이름 : {}, 가게 메뉴 : {}, 메뉴의 조리법 : {}" .format(self.name, self.menu, self.recipe)
def __del__(self):
pass
# 상속
class ChildRestaurant(ParentRestaurant):
price = 20000
def __init__(self, name, menu, recipe, marketing):
ParentRestaurant.__init__(self, name, menu, recipe)
self.marketing = marketing
def __str__(self):
return super().__str__() + ", 마케팅 방법 : {}".format(self.marketing)
restuarant_info = ChildRestaurant("나의 가게", "빵", "빵을 굽는다.", "온라인")
print(restuarant_info)
# result
가게 이름 : 나의 가게, 가게 메뉴 : 빵, 메뉴의 조리법 : 빵을 굽는다., 마케팅 방법 : 온라인
4) 날짜와 시간을 다루는 클래스 실습
- 모듈
- 코드를 작성해 둔 파일 (.py)
- calculator.py 파일 내에 사칙연산 함수를 저장해둔다.
# 모듈 활용
def add(num1, num2):
print(num1 + num2)
def sub(num1, num2):
print(num1 - num2)
def times(num1, num2):
print (num1 * num2)
def dev(num1, num2):
print(num1 / num2)
- import 를 이용하여 활용하여 calculator.py를 불러온 후, 작성이 용이하게 as를 사용하여 calculaotor를 c라는 별칭을 준다.
# 모듈 활용
import calculator as c
c.add(10, 20)
c.sub(2, 1)
c.times(4, 2)
c.dev(9, 3)
#result
30
1
8
3.0
- from ~ import 를 이용
# 모듈 활용 2
# import 를 이용하여 활용
from calculator import add as a
# calculator.py 에서 덧샘만 가져온 후 add를 a로 명명
a(10, 20)
# result
30
Python 공식홈페이지 > documentation > Python Docs > Library Reference
- 여러 모듈들을 import를 통해 이용할 수 있다.
- datetime 모듈을 이용한 실습
# 모듈 활용
# import 를 이용하여 활용
from datetime import date, datetime
today = date.today()
print(today)
# result
2022-04-21
new_date = date(2000, 2, 2)
print(new_date)
# result
2000-02-02
dt = datetime.now()
print(dt)
# result
2022-04-21 20:50:55.324895
library (라이브러리) 사용
pip.org 를 이용
- Visual Studio Code 터미널 에서
- pip install (사용할 이름) 을 이용해 설치