클래스에서 self란?
- 만들어지고 있는, 혹은 초기화되고 있는 실제 객체
- self는 파이썬 클래스의 인스턴스 메소드에서 객체를 참조하는데 사용되는 관례상의 첫 번째 매개변수이며, 이를 통해 메소드 내에서 인스턴스 변수나 다른 메소드에 액세스할 수 있다.
(현재 객체의 참조를 자동으로 받게 됨) - self를 사용하지 않으면 인스턴스의 속성이나 메소드에 액세스할 수 없게 되므로, 객체 지향 프로그래밍에서 중요한 기능이 제한됨
- self라는 이름을 반드시 사용해야 하는 것은 아님.
관례로 사용되는 이름일 뿐, 다른 이름을 사용할 수도 있음. 그러나 대부분의 파이썬 개발자는 이 관례를 따르기 때문에 다른 이름을 사용하면 코드의 가독성이 떨어질 수 있다.
self를 사용하는 여러 상황들
OOP 커피머신 코드
1) 클래스 객체에 저장
2) 리포트 메소드 호출
💡객체명은 주로 소문자와 스네이크 표기법(ex: coffee_maker)을 씀
보통 객체명은 클래스명과 같지만 소문자,표기법을 다르게 해서 구분
3) 사용자에게 무엇을 원하는지 묻기
- 메뉴 객체 만들기
- while문 생성 (기계 on/off 설정)
- 아이템 선택 질문 리스트 출력 메소드 호출
- 관리자 모드 off와 report 메소드 호출
4) 재료가 충분한지 확인
- 메뉴 항목 찾는 메소드(매개변수: 선택질문에서 받은 값) 변수 선언
- 재료확인 메소드(매개변수: 선택된 메뉴 변수)
5) 재료가 충분할 때 사용자에게 돈을 받고 동전을 처리하고 거래가 성공적인지 확인
6) 커피 만들기 (재료 차감 + 메시지 출력)
Final Code
from menu import Menu, MenuItem
from coffee_maker import CoffeeMaker
from money_machine import MoneyMachine
money_machine = MoneyMachine()
coffee_maker = CoffeeMaker()
menu = Menu()
is_on = True
while is_on:
options = menu.get_items()
choice = input(f"What would you like? ({options}): ")
if choice == "off":
is_on = False
elif choice == "report":
coffee_maker.report()
money_machine.report()
else:
drink = menu.find_drink(choice)
if coffee_maker.is_resource_sufficient(drink) and money_machine.make_payment(drink.cost):
coffee_maker.make_coffee(drink)
Day17 : Creating Classes
파이썬에서 클래스를 만드는 방법
class Name:
- 클래스 명은 모든 단어의 첫 번째 글자가 대문자여야 함(파스칼 케이스)
🐪카멜케이스는 두 번째 단어부터 대문자
속성, 클래스 생성자, init()함수 활용하기
클래스의 속성은 어떻게 만드는가?
객체로 들어가서 속성 추가
user_1.id = "001"
user_1.username = "angela"
### Constructor
생성자는 클래스의 일부로 객체가 생성될 때 무슨 일이 일어나야 하는지 명시할 수 있게 함
프로그래밍에서 객체 초기화로도 알려져 있음
객체가 초기화될 때 변수나 카운터의 시작 값을 지정할 수 있다.
생성자를 만들려면
class Car:
def __init__(self):
# initialise attributes
# 밑줄을 넣어 파이썬 인터프리터가 특별한 기능을 가진 메소드로 인식하게 함
⭐️ 클래스에서 새로운 객체를 만들 때마다 init함수가 호출됨
⭐️ 같은 속성을 가지는 객체를 많이 만들 때 이용하면 좋음
클래스에 메소드 추가하기
- 속성(attributes) : 객체가 가지는 것들
- 메소드(mothod) : 객체가 하는 것들, 객체 내 함수
함수와 다르게 항상 첫 매개변수로 self가 있어야 함
메소드 호출시 호출한 객체를 파악할 수 있다.
퀴즈게임 프로젝트(True or False)
질문 클래스 만들기
데이터로부터 질문 객체 리스트 만들기
들여쓰기 팁