Abstract Base Class라는 개념에 대해서 수업에서 배웠는데, 이를 활용할 수 있는 HackerRank의 문제다.
문제 해석
- Book과 Solution이라는 주어진 클래스에 대해, 다음과 같은 것을 수행하는 클래스 MyBook을 만들어라.
- Book을 상속할 것
- 생성자에 title(str), author(str), price(int)라는 세 매개변수를 가질 것
- Book 클래스의
display()
라는 메소드를 출력해서 다음의 3개 줄이 출력되도록 할 것- Title:, 공백, 현 instance의 title
- Author:, 공백, 현 instance의 author
- Price:, 공백, 현 instance의 price
문제 풀이
- 이번 챌린지는 비교적 간단하다. Book이라는 상위클래스에서 title, author의 initializer 을 상속받고, price는 상위클래스에 없는 매개변수이므로 따로 객체 변수로 지정해주면 된다. 그리고
display
라는 메소드를 override하여 위 출력을 작동시키면 된다.1
2
3
4
5
6
7from abc import ABCMeta, abstractmethod
class Book(object, metaclass=ABCMeta):
def __init__(self,title,author):
self.title=title
self.author=author
@abstractmethod
def display(): pass - 이것이 이미 주어져있는 Book이라는 Abstract Class이므로 이걸 상속받고 위의 요구사항들을 충족하는 하위클래스는 다음과 같은 코드로 표현할 수 있다.
1
2
3
4
5
6
7
8
9class MyBook(Book):
def __init__(self, title, author, price):
Book.__init__(self, title, author)
self.price = price
def display(self):
print("Title:", self.title)
print("Author:", self.author)
print("Price:", self.price) print
라는 메소드에 쉼표로 연결하면 공백이 자동으로 생기는 것을 이용하여 객체의 instance variable 앞에 각각 필요한 string을 넣어 출력해주었다.
느낀 점
간단하게 상속과 override를 배울 수 있는 문제였다.print
가 세번 반복되는 걸 줄일 수 있을까? 효율적인 방법이 생각나지 않아서 이렇게 했는데…