[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 붕어빵 잉어빵

3

= 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 모듈을 이용한 실습

4

# 모듈 활용
# 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 를 이용

5

  • Visual Studio Code 터미널 에서
    • pip install (사용할 이름) 을 이용해 설치

6