Class is a Blueprint.
class User:
pass # 공백으로 두고 싶을 때, 그냥 넘어가는 역할을 한다(그냥 빈칸으로 두면 오류가 남.)
user_1 = User()
class = User:
pass
user_1 = User()
user_1.id = "001"
user_1.username = "angela"
위와 같이 만들 수 있지만, 객체가 많을 때 보다 간편하게 만들 수 있는 방법도 존재한다.
시작 정보들을 청사진의 일부로 사용. (initialize)
- 변수나 카운터의 시작 값을 미리 지정할 수 있다
- 생성자를 만들려면 init 함수를 사용해야 한다.
- def_ _init__(self): 로 생성한다.
#예시, 좌석을 입력받는 Car 클래스 생성 후, 속성을 추가 class Car: def __init__(self, seats): self.seats = seats my_car = Car(5) # my_car.seats = 5
class User(self):
def __init__(self, user_id, username):
self.id = user_id
self.username = username
self.followers = 0 # 파라미터를 받지 않는 값
user_1 = User("001", "angela")
user_2 = User("002", "jack")
클래스에 생성자를 추가하면, 이 클래스에서 새로운 객체가 생성될 때 마다 파라미터의 갯수만큼 데이터를 전달해 주어야 한다.
만약 입력하지 않으면 에러가 발생한다.
속성: 객체가 가지고 있는 것들
메소드: 객체가 하는 것들
- 예시
class Car: def enter_race_mode(): self.seats = 2 my_car.enter_race_mode()
class User(self):
def __init__(self, user_id, username):
self.id = user_id
self.username = username
self.followers = 0 # 파라미터를 받지 않는 값
self.following = 0
def follow(self, user):
user.followers += 1
self.following += 1
user_1 = User("001", "angela")
user_2 = User("002", "jack")
user_1.follow(user_2) # user_1이 user_2를 팔로우함
print(user_1.followers) #0
print(user_1.following) #1
print(user_2.followers) #1
print(user_2.following) #0
간단한 OX게임을 제작한다.
- 사용자에게 문제를 제시하고 true 또는 false를 선택하게 한다
- 맞았는지 틀렸는지 채점하고, 점수를 준다.
- 데이터에는 문제에 대한 속성으로 text와 answer이 존재한다.
Create a Question class with an _ _init__() method with two attributes: text and answer
class Question:
def __init__(self, q_text, q_answer):
self.text = q_text
self.answer = q_answer
new_q = Question("test", "False")
print(new_q.text) # test
main.py
from question_model import Question
from data import question_data
question_bank = []
for question in question_data:
question_text = question["text"]
question_answer = question["answer"]
new_question = Question(question_text, question_answer)
question_bank.append(new_question)
print(question_bank[0].answer)
quiz_brain.py
class QuizBrain:
def __init__(self, q_list):
self.question_number = 0
self.question_list = q_list
def next_question(self):
current_question = self.question_list[self.question_number]
self.question_number += 1 # 문제를 1번부터라고 표기하기 위해
input(f"Q.{self.question_number}: {current_question_text} (True/False): ")
main.py
from question_model import Question
from data import question_data
from quiz_brain import QuizBrain
question_bank = []
for question in question_data:
question_text = question["text"]
question_answer = question["answer"]
new_question = Question(question_text, question_answer)
question_bank.append(new_question)
quiz = QuizBrain(question_bank)
quiz.next_question()
# Q.1: A slug's blood is green. (True/False):
사용자가 답을 입력한 후에 프로그램이 다음 질문을 계속 이어가는 것을 코딩한다.
이 문제는 methods를 만듬으로서 해결이 가능하다.
methods - next_question()
methods - still_has_question()
quiz_brain.py
class QuizBrain:
def __init__(self, q_list):
self.question_number = 0
self.question_list = q_list
def still_has_questions(self):
return self.question_number < len(self.question_list)
# 위에 조건이 참이면 True, 거짓이면 False를 반환한다.
def next_question(self):
current_question = self.question_list[self.question_number]
self.question_number += 1 # 문제를 1번부터라고 표기하기 위해
input(f"Q.{self.question_number}: {current_question_text} (True/False): ")
main.py
from question_model import Question
from data import question_data
from quiz_brain import QuizBrain
question_bank = []
for question in question_data:
question_text = question["text"]
question_answer = question["answer"]
new_question = Question(question_text, question_answer)
question_bank.append(new_question)
quiz = QuizBrain(question_bank)
while quiz.still_has_question(): # 퀴즈 문제가 남아 있을 때,
quiz.next_question()
답을 입력했을 때, 오답 체크와 확인하는 동작이 없고, 점수 출력 부분도 없으므로 해당 부분을 제작해본다.
- methods - check_answer() 을 제작한다.
quiz_brain.py
class QuizBrain:
def __init__(self, q_list):
self.question_number = 0
self.question_list = q_list
self.score = 0
def still_has_questions(self):
return self.question_number < len(self.question_list)
# 위에 조건이 참이면 True, 거짓이면 False를 반환한다.
def next_question(self):
current_question = self.question_list[self.question_number]
self.question_number += 1 # 문제를 1번부터라고 표기하기 위해
input(f"Q.{self.question_number}: {current_question_text} (True/False): ")
self.check_answer(user_answer, correct_question.answer)
def check_answer(self, user_answer, correct_answer):
if user_answer == correct_answer.lower()
print("You got it right!")
self.score += 1
else:
print("That's wrong")
print(f"The correct answer was : {correct_answer}.")
print(f"Youre current score is: {self.score}/{self.question_number}")
print("\n")
main.py
from question_model import Question
from data import question_data
from quiz_brain import QuizBrain
question_bank = []
for question in question_data:
question_text = question["text"]
question_answer = question["answer"]
new_question = Question(question_text, question_answer)
question_bank.append(new_question)
quiz = QuizBrain(question_bank)
while quiz.still_has_question(): # 퀴즈 문제가 남아 있을 때,
quiz.next_question()
print("You've completed the quiz")
print(f"Your final score was: {quiz.score}/{quiz.question_number}")