程序的骨架
定义Book类
class Book:
def __init__(self, name, author, comment, state = 0):
self.name = name
self.author = author
self.comment = comment
self.state = state
# 分别表示书名、作者、推荐语和借阅状态
book = Book('看不见的城市','卡尔维诺','献给城市的最后一首爱情诗')
# state为默认参数,如无修改必要不用传递
print(book.author)
为了后续方便参数传递,借阅状态state
采用默认参数,用0来表示’未借出’,1来表示’已借出’。
初始化方法定义完成后,一旦实例对象被创建,这几个属性就存在且可随时调用。
名称:《像自由一样美丽》 作者:林达 推荐语:你要用光明来定义黑暗,用黑暗来定义光明。
状态:未借出
class Book:
def __init__(self, name, author, comment, state = 0):
self.name = name
self.author = author
self.comment = comment
self.state = state
def show_info(self):
if self.state == 0:
# 如果属性state等于0
status = '未借出'
# 将字符串'未借出'赋值给status
else:
status = '已借出'
return '名称:《%s》 作者:%s 推荐语:%s 状态:%s ' % (self.name, self.author, self.comment, status)
# 返回书籍信息
Bingo!不过这里老师要介绍一个更符合编程习惯的方法__str__(self)
。
在Python中,如果方法名形式是左右带双下划线的,那么就属于特殊方法(如初始化方法),有着特殊的功能。
解释一下:只要在类中定义了__str__(self)
方法,那么当使用print
打印实例对象的时候,就会直接打印出在这个方法中return
的数据。
可能有点绕,看代码会直观一点。我们直接把上述代码里的方法名show_info(self)
替换成__str__(self)
,留意最后一行调用的代码,然后点击运行:
class Book:
def __init__(self, name, author, comment, state = 0):
self.name = name
self.author = author
self.comment = comment
self.state = state
def __str__(self):
if self.state == 0:
status = '未借出'
else:
status = '已借出'
return '名称:《%s》 作者:%s 推荐语:%s\n状态:%s ' % (self.name, self.author, self.comment, status)
book1 = Book('像自由一样美丽','林达','你要用光明来定义黑暗,用黑暗来定义光明')
# 传入参数,创建实例对象
print(book1)
# 直接打印对象即可,不能写成print(book1.__str__())
类BookManager的编写
menu()
是与用户互动的界面,刚刚我们已经给出了demo:
用户输入数字执行相应的功能,程序内部调用的逻辑应该是:
1.查询所有书籍
# 调用方法show_all_book()
2.添加书籍
# 调用方法add_book()
3.借阅书籍
# 调用方法lend_book()
4.归还书籍
# 调用方法return_book()
5.退出系统
请输入数字选择对应的功能:
class BookManager
def menu(self):
print('欢迎使用流浪图书管理系统,每本沉默的好书都是一座流浪的岛屿,希望你有缘发现并着陆,为精神家园找到一片栖息地。\n')
while True:
print('1.查询所有书籍\n2.添加书籍\n3.借阅书籍\n4.归还书籍\n5.退出系统\n')
choice = int(input('请输入数字选择对应的功能:'))
if choice == 1:
self.show_all_book()
# 调用对象方法时self不能忘
elif choice == 2:
self.add_book()
elif choice == 3:
self.lend_book()
elif choice == 4:
self.return_book()
elif choice == 5:
print('感谢使用!愿你我成为爱书之人,在茫茫书海里相遇。')
break