Sign In
TIL 웹개발

TIL 웹개발 - 두 class로 생성한 instance 연결, 공유하는 법

서경태
과제 내용을 보면 두 개의 class를 사용한다.
1.
계정을 생성하는 Member 클래스
2.
포스트를 생성하는 Post 클래스
각 클래스로 생성한 인스턴스를 리스트로 만들어 보여주는데 우리는 덧붙여 포스트를 삭제하는 기능을 넣었다.
그냥 __del__(소멸자: __init__과 반대)를 사용하면 되는거 되네 싶었는데, 실제 서비스에선 다른 사람이 내글을 마음대로 지운다면 진짜
개빡칠 것 아닌가?
그래서 아이디와 비밀번호를 기입해 포스트 삭제에 대한 권한을 부여한다.
members = [m1, m2, m3]
m1 = [name, username, password]
Member 클래스로 만든 member 인스턴스와 인스턴스를 리스트로 만든 memebrs다.
posts [p1, p2, p3]
p1 = [title, content, author]
Post 클래스로 만든 post 인스턴스와 인스턴스를 리스트로 만든 posts다. (단, author = username)
두 데이터를 연결시키는 방법은 post의 author 속성에 Member 클래스 인스턴스를 넣는 것이다.
그러면 아래 이미지처럼 사용할 수 있다.
그럼 p1 = [title, content, m1] 형태로 사용할수 있고 p1의 author를 알고 싶다면 p1.author.username을 사용하면된다. 그리고 만약 p1의 비밀번호를 알려면 p1.author.password를 사용하면 된다.
🖥️
elif select == '4': # 게시글 작성
while True:
id_input = input("ID를 입력해주세요. ")
member_matched = None
for member in members:
if id_input == member.username:
member_matched = member
break
if member_matched:
while True:
ps_input = input("패스워드를 입력해주세요. ")
if ps_input == member_matched.password:
print("게시글을 작성해주세요.")
title = input("\n제목: ")
content = input("내용: ")
posts.append(Post(title, content, member_matched))
print("\n게시글 작성을 완료했습니다.")
break
else:
print("패스워드가 일치하지 않습니다.")
break
else:
print("ID가 존재하지 않습니다. ")
위 코드에선 게시글을 작성할 때, 아이디와 비밀번호를 확인한다. 확인이 맞으면(memebr_matched) 제목과 내용을 기입하고 posts 리스트에 post 객체가 추가되는데 여기서 author에 member_matched를 사용한다.
member_matched는 아이디와 비밀번호로 찾은 member 인스턴스이다.
🖥️
elif select == '5': # 게시글 삭제
del_title = input("삭제할 게시글의 제목을 입력하세요. ")
post_matched = None
for post in posts:
if del_title == post.title:
post_matched = post
break
if post_matched:
while True:
id_input = input("ID를 입력해주세요. ")
if id_input == post_matched.author.username:
while True:
ps_input = input("패스워드를 입력해주세요. ")
if ps_input == post_matched.author.password:
posts.remove(post_matched)
print(f'{post_matched.title}이 삭제되었습니다.')
break
else:
print("패스워드가 일치하지 않습니다.")
break
else:
print("아이디가 일치하지 않습니다.")
이렇게 게시글을 삭제할때, title을 검색해서 삭제할 post를 선택(post_matched라고 정의)하고 username과 password가 일치하면 삭제되는 기능이다.
post_matched.author.username = member.username
post_matched.author.password = member.password
기억하자. 두 클래스는 인스턴스를 공유할 수 있고 그 방법은 한 인스턴스를 다른 클래스의 속성으로 사용하면 된다.
Subscribe to 'kyugntae-ai'
Subscribe to my site to be the first to receive notifications and emails about the latest updates, including new posts.
Join Slashpage and subscribe to 'kyugntae-ai'!
Subscribe
👍