-
python, class, 인스턴스 생성 - 간단한 sns platform 코딩Python 2024. 7. 5. 19:44
파이썬, class를 사용하여 간단한 sns platform의 유저 정보를 받는 코딩 문제
저번 과제 피드백이 절차지향적으로 코드를 잘 짰다는 걸 보면.. 아마도.. 객체지향적으로는 단단함이 부족하다는 의미가 아닐까 싶었다.. 그래서 이번 과제가 class를 이용한 과제인만큼 객체지향적으로 코드를 짜보자고 다짐했다.
구현해야 할 조건은 아래와 같다.
1. Member 클래스
- 회원 이름 (name)
- 회원 아이디 (username
- 회원 비밀번호 (password)
*회원 정보를 print해주는 display: 회원이름과 아이디만 보여주고 비밀번호는 보여줘서는 안됨
2. Post 클래스
- 게시물 제목 (title)
- 게시물 내용 (content)
- 작성자 (author) : 회원의 username 이 저장되어야 함!
3. 회원 인스턴스 세개 이상 생성
- members 라는 빈리스트에 append를 써서 저장, members 리스트를 돌면서 회원들의 이름을 모두 프린트
- 각각의 회원이 게시글을 세개 이상 작성하는 코드 짜기 (회원이 세명이명 총 9개 이상의 post 인스턴스가 만들어져야 함)
- 만들어진 게시글 인스턴스들은 posts 빈리스트에 append를 써서 저장
- for 문을 돌면서 특정유저가 작성한 게시글의 제목을 모두 프린트
- for문을 돌면서 ‘특정 단어’가 content에 포함된 게시글의 제목을 모두 프린트
1. 기본적인 것만 구현한 코드
비밀번호 해싱을 위해 hashlib를 임포트 해줬다.
근데 사실 해싱은 처음이라서 간단하게 코드를 짰다. 이 정도로는 보안이 약하기 때문에 실제로 sns 플랫폼을 개발한다면 더 강한 암호화 코드가 필요할것이다.
import hashlib # 비밀번호 해싱을 위한 hashlib 라이브러리 임포트 # 멤버 클래스 class Member: def __init__(self, name, username, password): self.name = name self.username = username self.password = self.hashed_pw(password) # 사실 이 정도 해싱으로는 보안이 약해서 더 강한 암호화가 필요하지만 아직 잘 몰라서 간단하게 구현했다. def hashed_pw(self, password): hash_obj = hashlib.sha256() hash_obj.update(password.encode()) return hash_obj.hexdigest() # 포스트 클래스 class Post: def __init__(self, title, content, username): self.title = title self.content = content self.username = username # 출력은 Author로 해줄거다.
만들어야 할 class는 2개이다. Member 클래스와 Post 클래스
각각 가져야 할 속성값을 주고, 포스트에서 작성자는 Author로 출력되지만 아이디값이기 때문에 username으로 줬다.
# 멤버 인스턴스 생성 members = [ Member("김우린", "lina", "1q2w3e4r"), Member("이상현", "shlee", "qqqq1111"), Member("이새예", "saeye", "1010qpqp") ] # 포스트 인스턴스 생성 posts = [ Post("개인프로젝트", "개인프로젝트 과제인 업다운 게임 코드와 가위바위보 게임 코딩이 끝났습니다.", "lina"), Post("팀프로젝트", "팀프로젝트를 시작했습니다. 팀플용 깃허브 리포지토리와 브랜치를 생성했습니다.", "shlee"), Post("깃허브", "코드리뷰를 하기 위해 깃허브 브랜치에 각자 만든 코드를 업로드 하였습니다.", "saeye") ] # for문을 돌며 회원의 이름과 ID 정보를 출력하는 함수 def member_info(members): print("\nMember Info") for member in members: print(f"이름: {member.name}, ID: {member.username}") # for문을 돌며 Post 정보를 출력하는 함수 (Title, Content, Author) def post_info(posts): print("\nPost Info") for post in posts: post.display_post() # for문으로 members 리스트를 돌면서 유저의 이름만 출력 def member_name(): for member in members: print(member.name) # 입력한 키워드를 포함한 게시글의 제목 리스트를 출력하는 함수 def search_post(keyword): titles = [] # 입력한 키워드가 포함된 게시글의 제목을 넣어줄 빈 리스트 하나 생성 for post in posts: # for문으로 반복 if keyword in post.content: # 입력한 키워드가 포스트의 게시글 안에 있으면 titles.append(post.title) # 그 게시글의 제목을 앞에서 만들어준 titles 리스트에 추가 if titles: # titles리스트에 값이 있으면, 즉 키워드를 포함하는 게시글이 있으면 print(f"해당 키워드가 포함된 게시글 제목 리스트: {titles}") # 출력해주고 else: # 없으면 print("해당 키워드로 검색된 게시글이 없습니다.") # 없다고 출력해준다. member_info(members) post_info(posts) keyword = input("검색할 키워드를 입력해주세요: ") search_post(keyword)
코드를 실행시켜 보면 이렇게 된다.
Member Info 이름: 김우린, ID: lina 이름: 이상현, ID: shlee 이름: 이새예, ID: saeye Post Info Title: 개인프로젝트 / Content: 개인프로젝트 과제인 업다운 게임 코드와 가위바위보 게임 코딩이 끝났습니다. / Author: lina Title: 팀프로젝트 / Content: 팀프로젝트를 시작했습니다. 팀플용 깃허브 리포지토리와 브랜치를 생성했습니다. / Author: shlee Title: 깃허브 / Content: 코드리뷰를 하기 위해 깃허브 브랜치에 각자 만든 코드를 업로드 하였습니다. / Author: saeye 검색할 키워드를 입력해주세요: 깃허브 해당 키워드가 포함된 게시글 제목 리스트: ['팀프로젝트', '깃허브'] Process finished with exit code 0
'Python' 카테고리의 다른 글
flask 파이참 템플릿, code snippets이 안불러와질때 (0) 2024.07.09 파이썬, class로 sns platform 코드2 input으로 객체 생성 (0) 2024.07.06 가위 바위 보 게임 코드 만들기 (1) 2024.07.04 파이썬으로 업다운 게임 만들기 (0) 2024.07.02 파이썬 문법 심화 (1) 2024.06.30