Python 과제 3. 클래스 사용해보기

2023. 8. 21. 20:07과제

용어 설명

  • 클래스 : 클래스는 인스턴스의 설계도나 템플릿입니다. 객체의 속성(어트리뷰트)과 행위(메소드)를 정의하는 틀입니다. 예를 들어, 자동차 클래스는 자동차의 속성(색상, 모델 등)과 행위(가속, 정지 등)를 정의합니다.
  • 인스턴스 : 클래스의 정의를 기반으로 실제로 생성된 객체를 인스턴스라고 합니다
  • 메소드 : 클래스 함수라고도 합니다. 클래스 내에서 지정된 함수입니다. 자동차 클래스의 "가속"이나 "정지"와 같은 작업이 메소드의 예시입니다.
  • 어트리뷰트 : 클래스 변수라고도 합니다. 클래스 내에서 변수를 지정할때 사용합니다. 자동차 클래스에서 "색상"이나 "모델"과 같은 특징이 어트리뷰트의 예시입니다.

아직 용어가 익숙하지 않으신 분들은 클래스 부분 복습이 필요할 수 있습니다

 

과제 내용:

  1. Member 클래스와 Post 클래스를 정의하세요.
  2. Member 클래스에는 다음과 같은 속성을 가지고 있어야 합니다.
    • 회원 이름 (name)
    • 회원 아이디 (username)
    • 회원 비밀번호 (password)
  3. Member 클래스에는 다음과 같은 메소드를 가지고 있어야 합니다.
    • 회원 정보를 print해주는 display (회원이름과 아이디만 보여주고 비밀번호는 보여줘서는 안됩니다!)
  4. Post 클래스에는 다음과 같은 속성을 가지고 있어야 합니다.
    • 게시물 제목 (title)
    • 게시물 내용 (content)
    • 작성자 (author) : 회원의 username 이 저장되어야 함!
  5. 회원 인스턴스를 세개 이상 만들고 members 라는 빈리스트에 append를 써서 저장해주세요
    1. members 리스트를 돌면서 회원들의 이름을 모두 프린트 해주세요
  6. 각각의 회원이 게시글을 세개 이상 작성하는 코드를 만들어주세요.(회원이 세명이명 총 9개 이상의 post 인스턴스가 만들어져야 합니다). 만들어진 게시글 인스턴스들은 posts 빈리스트에 append를 써서 저장해주세요
    1. for 문을 돌면서 특정유저가 작성한 게시글의 제목을 모두 프린트 해주세요
    2. for문을 돌면서 ‘특정 단어’가 content에 포함된 게시글의 제목을 모두 프린트 해주세요. 

추가 도전 과제:

  1. input을 이용하여 Member 인스턴스 만드는것을 사용자가 터미널에서 할 수 있게 해주세요.
  2. post도 터미널에서 생성할 수 있게 해주세요.
  3. (심화)비밀번호 해싱이 무엇인지 공부한 후 hashlib 라이브러리를 써서 회원 비밀번호를 해시화하여 저장하게 해주세요.

평가

  • 클래스와 인스턴스 개념을 설명할 수 있는가?
  • 메소드와 어트리뷰트(속성)을 설명할 수 있는가?
  • 클래스를 정의할 수 있는가?
  • 인스턴스를 생성할 수 있는가?

 

진행과정:

class Member1():
    name = '보라돌이'
    username = 'purple'
    password = 'purple1'


class Member2():
    name = '뚜비'
    username = 'green'
    password = 'green1'


class Member3():
    name = '나나'
    username = 'yellow'
    password = 'yellow1'


m = Member1()
m = Member2()
m = Member3()
print("Your name is", m.name, "Your username is", m.username)

회원 이름과 username만 print 하라 그랬는데... 아 아무래도 이렇게 무식한 방법을 쓸리는 없다. list 로 묶어서 조금 더 똑똑하게 만들어 볼 수는 없을까.

class Member():
    def __init__(self, name, username, password):
        self.name = name
        self.username = username
        self.password = password


list = []

list.append(Member('보라돌이', 'purple', 'purple1'))
list.append(Member('뚜비', 'green', 'green1'))
list.append(Member('나나', 'yellow', 'yellow1'))


print(list[0], Member.name, Member.username)

Another trial... 에러먹음

class Member:
    def __init__(self, name, username, password):
        self.name = name
        self.username = username


Member1 = Member("보라돌이", "purple", "eggplant")
Member2 = Member("뚜비", "green", "grass")

print(Member1.name, Member1.username)
print(Member2.name, Member2.username)

오 드디어 완성. 그치만 아직 1단계😂
참고한 사이트: https://www.freecodecamp.org/news/python-attributes-class-and-instance-attribute-examples/

그런데... print가 class 안에 있는 메소드가 아닌것 같은데... 맞는건가? 흐음... 일단 넘어가자

 

Python Attributes – Class and Instance Attribute Examples

When creating a class in Python, you'll usually create attributes that may be shared across every object of a class or attributes that will be unique to each object of the class. In this article, we'll see the difference between class attributes and instan

www.freecodecamp.org

#1,2 Member class의 속성 정의
class Member:
    def __init__(self, name, username, password):
        self.name = name
        self.username = username
        self.password = password

#5 Member instance 3개 만들기
Member1 = Member("보라돌이", "purple", "eggplant1")
Member2 = Member("뚜비", "green", "grass2")
Member3 = Member("나나", "yellow", "banana3")

#3 Member class에 회원정보를 print해주는 display 
#(Member class의 메소드라고 부를 수 있는지는 모르겠다.)
print(Member1.name, Member1.username)
print(Member2.name, Member2.username)
print(Member3.name, Member3.username)

#1,4 Post class의 속성 정의
class Post(Member):
    def __init__(self, title, content, author):
        self.title = title
        self.content = content
        self.author = self.username

#5 members 빈 리스트에 append써서 회원 인스턴스 저장
members = []
members.append(Member1)
members.append(Member2)
members.append(Member3)
print(members[0].name, members[1].name, members[2].name)

오 마지막에 리스트에서 끙끙거리다 기술매니저님 만나서 해결하고 배우고 옴. 하 이게 뭐라고 오늘은 과제3번을 하루종일 했눼... 내일은 6번하고... 추가과제들 한번씩 쭉 돌면서 살 붙이기 해야겠다. 아 약간 고딩때 수학문제 풀던거 생각나네... 수학의 정석 집합편 1번문제 풀다가 하루 간 느낌이다ㅋㅋㅋㅋ고생해따ㅋㅋ

# 1,2 Member class의 속성 정의
class Member:
    def __init__(self, name, username, password):
        self.name = name
        self.username = username
        self.password = password

    def add_member():
        Member.add_member(input("Enter name: "), input(
            "Enter username: "), input("Enter password: "))


# 5 Member instance 3개 만들기
member1 = Member("보라돌이", "purple", "eggplant1")
member2 = Member("뚜비", "green", "grass2")
member3 = Member("나나", "yellow", "banana3")

# 3 Member class에 회원정보를 print해주는 display
# (Member class의 메소드라고 부를 수 있는지는 모르겠다.)
print(member1.name, "'s username is ", member1.username)
print(member2.name, "'s username is ", member2.username)
print(member3.name, "'s username is ",  member3.username)

# 5 members 빈 리스트에 append써서 회원 인스턴스 저장
members = []
members.append(member1)
members.append(member2)
members.append(member3)
print("Name of the members are",
      members[0].name, members[1].name, members[2].name)

# 1,4 Post class의 속성 정의
class Post:
    def __init__(self, title, content, author):
        self.title = title
        self.content = content
        self.author = author


# 6 posts instance 3개 만들기
post1 = Post("오늘아침메뉴", "빵먹었다", member1.username)
post2 = Post("어제점심메뉴", "김밥먹었다", member2.username)
post3 = Post("어제저녁메뉴", "생선먹었다", member3.username)

# 6 posts 빈 리스트에 append써서 게시글 인스턴스 저장 / 제목 프린트 / 특정단어가 포함된 게시글의 제목 프린트
posts = []
posts.append(post1)
posts.append(post2)
posts.append(post3)
for t in posts:
    print(t.author, "posted", t.title)
for t2 in posts:
    if '먹었다' in posts:
        print(t2.content)  # error

post 클래스를 만들고, 거기에 append 하는것 까지 완료. 그런데 input으로 멤버info 랑, post 받아서 class에 넣는것을 아직 못하겠다...

'과제' 카테고리의 다른 글

Python 과제 2. 가위바위보 게임  (0) 2023.08.21
Python 과제 1. Up down game 만들기  (0) 2023.08.21