언어 자료구조 알고리즘/프로그래밍 실습

[python] 상속 실습 - 커뮤니티(게시글, 비밀게시글)

언제나휴일 2020. 10. 30. 14:36
반응형

커뮤니티 클래스 다이어그램

클래스 다이어그램과 사용하는 코드에 맞게 클래스를 정의하시오.

Main.py


comm = Community()
comm.Publish("빅데이터","홍길동","빅데이터에 데이터는 빅하네.")
comm.Publish("AI","강감차","에잇, 아이야 저리로 가거라.","abcd")
comm.View()
post = comm.Find("AI")
print("제목:",post.title)
print("저자:",post.writer)
print("내용:",post.content)
comm.Remove("빅데이터")
comm.View()

Step1: 클래스에 멤버를 캡슐화하라.

멤버 메서드에서는 어느 메서드가 수행 중인지만 출력하는 형태로 작성하시오.

예를 들어 View메서드에서는 print("View")로 작성

단) 프로그램은 오류없이 동작해야 합니다.

Post.py

#Post.py
class Post:
    def __init__(self,title,writer,content):
        print("Post 생성")
        self.title = title
        self.writer = writer
        self.content = content

Community.py

#Community.py
from Post import Post
from SPost import SPost
class Community:
    def __init__(self):
        print("커뮤니티 생성")
    def Publish(self,title,writer,content,secret=""):
        print("Publish")
    def View(self):
        print("View")
    def Find(self,title):
        print("Find")
        return Post("a","b","c")
    def Remove(self,title):
        print("Remove")

Main.py

from Community import Community

comm = Community()
comm.Publish("빅데이터","홍길동","빅데이터에 데이터는 빅하네.")
comm.Publish("AI","강감차","에잇, 아이야 저리로 가거라.","abcd")
comm.View()
post = comm.Find("AI")
print("제목:",post.title)
print("저자:",post.writer)
print("내용:",post.content)
comm.Remove("빅데이터")
comm.View()

 


Step2: 목적에 맞게 메서드 내부를 구현하시오.

SPost.py

#SPost.py
from Post import Post
class SPost(Post):
    def __init__(self,title,writer,content,secret):
        #Post.__init__(self,title,writer,content)
        super().__init__(title,writer,content)
        self.secret = secret

Post.py

#Post.py
class Post:
    def __init__(self,title,writer,content):
        print("Post 생성")
        self.title = title
        self.writer = writer
        self.content = content

Community.py

#Community.py
from Post import Post
from SPost import SPost
class Community:
    def __init__(self):
        print("커뮤니티 생성")
        self.posts = list()
    def Publish(self,title,writer,content,secret=""):
        print("Publish")
        if secret=="":
            post = Post(title,writer,content)
            self.posts.append(post)
        else:
            post = SPost(title,writer,content,secret)
            self.posts.append(post)
    def View(self):
        print("View")
        for post in self.posts:
            self.ViewPost(post)
    def ViewPost(self,post):
        print("제목:",post.title)
        print("작성자:",post.writer)
        print("내용:",post.content)
        if(isinstance(post,SPost)):
            print("비밀글")
    def Find(self,title):
        print("Find")
        for post in self.posts:
            if(post.title == title):
                return post
        return None
    def Remove(self,title):
        print("Remove")
        for post in self.posts:
            if(post.title == title):
                self.posts.remove(post)
                break

Main.py

from Community import Community

comm = Community()
comm.Publish("빅데이터","홍길동","빅데이터에 데이터는 빅하네.")
comm.Publish("AI","강감차","에잇, 아이야 저리로 가거라.","abcd")
comm.View()
post = comm.Find("AI")
print("제목:",post.title)
print("저자:",post.writer)
print("내용:",post.content)
comm.Remove("빅데이터")
comm.View()
반응형