"""
类的继承
继承(Inheritance)就是在继承原有类功能的基础上,增加新的功能(属性或方法),形成新的类,相对于继承的原有类称为子类,
    被继承的原有类叫父类。
继承的基本格式:
    class 子类名(父类名)
    class 子类名(父类名1, 父类名2, ...)  # 继承多个父类
"""


class Book:
    """书籍类"""
    def __init__(self, book_name, book_author, book_price):
        self.name = book_name
        self.author = book_author
        self.price = book_price

    def print_book_info(self):  # 打印书的信息
        book_info = '书名:' + self.name + ',作者:' + self.author + ',价格:$' + str(self.price)
        return book_info


class SubBook(Book):  # 继承父类 Book 定义子类 SubBook
    """继承书籍类的子书籍类"""
    def __init__(self, book_name, book_author, book_price, book_numbers):  # 子类重新定义 __init__
        super().__init__(book_name, book_author, book_price)  # super() 方法实现父类与子类的关联
        self.color = 'black'  # 增加颜色属性
        self.material = 'paper'  # 增加材质属性
        self.numbers = book_numbers  # 增加购书总量

    def total_price(self):  # 求购书总价
        total = self.price * self.numbers
        return total


# ==================================================================== 调用类及实例
book_of_name = input('请输入书籍名称:')
book_of_author = input('请输入书籍作者:')
book_of_price = float(input('请输入书籍价格:'))
book_of_numbers = int(input('请输入购买书籍总数:'))

my_book = SubBook(book_of_name, book_of_author, book_of_price, book_of_numbers)
print('\n书籍信息:', my_book.print_book_info())
print('购买书籍总价:$', my_book.total_price())


"""
继承使用方法:
(1)在子类声明时,引入父类名:“class SubBox(Box):”
(2)重新定义子类的 __init__ 函数,若父类 __init__ 有参数,则照抄父类函数的参数
(3)在子类 __init__ 函数提供 super 函数,实现父类与子类的关联,若父类有参数,需要同步参数(self 除外),如:
    super().__init__(length, width, height)
(4)可以在子类中增加新属性定义
(5)可以在子类中增加新方法定义
(6)可以重写父类中定义的方法
"""