十二、

1.类

实例化代码
class Computer:screen = Truedef start(self):print('电脑正在开机中……')my_computer = Computer()
print(type(my_computer))
print(my_computer)
print(my_computer.screen)
my_computer.start()
终端显示
bash:baeb3c75-9bc4-1e20-6998-9ab0df475542$ python ~/classro/apps-1-id-5cd9765f19bbcf00015547bb/baeb3c75-9bc4-1e20-6998ab0df475542/main.py
<class '__main__.Computer'>
<__main__.Computer object at 0x7fb17985e460>

第一行:<class ‘main.Computer’>验证了my_computer属于Computer这个类;第二行打印出Computer类的一个实例对象(object),后面的一串字符表示这个对象的内存地址。
倒数第二行:my_computer.screen先是获取到类属性screen对应的值True,再用print()打印出来。
最后一行:my_computer.start()调用方法start(),这个方法的功能是直接打印出’电脑正在开机中……’。

特殊参数:self

self代表的是类的实例本身,方便数据的流转。对此,我们需要记住两点:

第一点:只要在类中用def创建方法时,就必须把第一个参数位置留给 self,并在调用方法时忽略它(不用给self传参)。

第二点:当在类的方法内部想调用类属性或其他方法时,就要采用self.属性名或self.方法名的格式。

特殊方法:初始化方法
class Chinese:# 初始化方法的创建,init两边双下划线。def __init__(self, hometown):self.hometown = hometownprint('你在哪里出生?')def born(self):print('我生在%s。' % self.hometown)wufeng = Chinese('广东') # 传给参数hometown
wufeng.born()

十三、

2.类的继承

实例
class Chinese:eye = 'black'def eat(self):print('吃饭,选择用筷子。')class Cantonese(Chinese):
# 通过继承,Chinese类有的,Cantonese类也有pass# 验证子类可以继承父类的属性和方法,进而传递给子类创建的实例
yewen = Cantonese()
# 子类创建的实例,从子类那间接得到了父类的所有属性和方法
print(yewen.eye)
# 子类创建的实例,可调用父类的属性
yewen.eat()
# 子类创建的实例,可调用父类的方法

各级实例和各级类之间的关系
1.子类创建的实例,同时属于父类;
2.父类创建的实例,不属于子类;
3.所有实例,都属于object。

多层继承和多重继承

1.多层继承:类在纵向上的深度拓展

class B(A):
class C(B):

特点:子类创建的实例,可调用所有层级的父类的属性和方法。
2.多重继承:类在横向上的宽度拓展

class A(B,C,D):

特点:就近原则:在子类调用属性和方法时,优先考虑靠近子类的父类。

类的定制:1.新增代码 2.重写代码

实例

class Chinese:def __init__(self, greeting = '你好', place = '中国'):self.greeting = greetingself.place = placedef greet(self):print('%s!欢迎来到%s。' % (self.greeting, self.place))class Cantonese(Chinese):def __init__(self, greeting = '雷猴', place = '广东'):Chinese.__init__(self, greeting, place)yewen = Cantonese()
yewen.greet()

十四、实例

class Book:def __init__(self, name, author, comment, state = 0):self.name = nameself.author = authorself.comment = commentself.state = statedef __str__(self):status = '未借出'if self.state == 1:status = '已借出'return '名称:《%s》 作者:%s 推荐语:%s\n状态:%s ' % (self.name, self.author, self.comment, status)class BookManager:books = []def __init__(self):book1 = Book('惶然录','费尔南多·佩索阿','一个迷失方向且濒于崩溃的灵魂的自我启示,一首对默默无闻、失败、智慧、困难和沉默的赞美诗。')book2 = Book('以箭为翅','简媜','调和空灵文风与禅宗境界,刻画人间之缘起缘灭。像一条柔韧的绳子,情这个字,不知勒痛多少人的心肉。')book3 = Book('心是孤独的猎手','卡森·麦卡勒斯','我们渴望倾诉,却从未倾听。女孩、黑人、哑巴、醉鬼、鳏夫的孤独形态各异,却从未退场。',1)self.books.append(book1)self.books.append(book2)self.books.append(book3)self.authors.append(book1.author)self.authors.append(book2.author)self.authors.append(book3.author)def menu(self):print('欢迎使用流浪图书管理系统,每本沉默的好书都是一座流浪的岛屿,希望你有缘发现并着陆,为精神家园找到一片栖息地。\n')while True:print('1.查询所有书籍\n2.添加书籍\n3.借阅书籍\n4.归还书籍\n5.退出系统\n')choice = int(input('请输入数字选择对应的功能:'))if choice == 1:self.show_all_book()elif choice == 2:self.add_book()elif choice == 3:self.lend_book()elif choice == 4:self.return_book()elif choice == 5:print('感谢使用!愿你我成为爱书之人,在茫茫书海里相遇。')breakdef show_all_book(self):print('书籍信息如下:')for book in self.books:print(book)print('')def add_book(self):new_name = input('请输入书籍名称:')new_author =  input('请输入作者名称:')new_comment = input('请输入书籍推荐语:')new_book = Book(new_name, new_author, new_comment)self.books.append(new_book)print('书籍录入成功!\n')def check_book(self,name):for book in self.books:if book.name == name:return book else:return Nonedef lend_book(self):name = input('请输入书籍的名称:')res = self.check_book(name)if res != None:if res.state == 1:print('你来晚了一步,这本书已经被借走了噢')else:print('借阅成功,借了不看会变胖噢~')res.state = 1else:print('这本书暂时没有收录在系统里呢')def return_book(self):name = input('请输入归还书籍的名称:')res = self.check_book(name)# 调用check_book方法,将返回值赋值给变量resif res == None:# 如果返回的是空值,即这本书的书名不在系统里print('没有这本书噢,你恐怕输错了书名~')else:# 如果返回的是实例对象if res.state == 0:# 如果实例属性state等于0,即这本书的借阅状态为'未借出'print('这本书没有被借走,在等待有缘人的垂青呢!')else:# 如果实例属性state等于1,即状态为'已借出'print('归还成功!')res.state = 0# 归还后书籍借阅状态为0,重置为'未借出'def show_author_book(self):author = input('请输入想查询作家的名称:')if author in self.authors:print(author + '的作品有:')for book in self.books:if book.author == author:print(book)else:print('很可惜,我们暂时没有收录这位作者的作品')
manager = BookManager()
manager.menu()

【Python】STEP 4相关推荐

  1. 【Python】Python实战从入门到精通之二 -- 教你使用Python中列表操作

    本文是Python实战–从入门到精通系列的第二篇文章: [Python]Python实战从入门到精通之一 – 教你深入理解Python中的变量和数据类型 Python实战从入门到精通之二 – 教你使用 ...

  2. 【Python】Numpy数组的切片、索引详解:取数组的特定行列

    [Python]Numpy数组的切片.索引详解:取数组的特定行列 文章目录 [Python]Numpy数组的切片.索引详解:取数组的特定行列 1. 介绍 2. 切片索引 2.1 切片索引先验知识 2. ...

  3. 【Python】 plt.savefig保存图片时一片空白

    [Python]解决使用plt.savefig保存图片时一片空白 plt.cla()plt.title('training data set')x_axis = range(1, 90, 1)plt. ...

  4. 【Python】从0到1:一文教会你如何用Python制作好看又实用的二维码!【文末彩蛋!】(可直接copy + 运行哦~!)

    Hi~ o(* ̄▽ ̄*)ブ!你好吖~! 经过 "作业雨 " 的 "洗礼",我终于又回来啦!!! 今天又有什么 "惊喜" 捏?! 往下看叭~! ...

  5. 【python】将python 编译为二进制可执行程序

    [python]将python 编译为二进制可执行程序 使用 python 的包管理工具 pip 下载pyinstaller step 1 : pip install pyinstall 可能会提示: ...

  6. python读取哨兵卫星数据_科学网—【Python】批量下载Sentinel-2卫星数据 - 江佳乐的博文...

    简介:本文介绍了一种基于Python批量下载Sentinel-2卫星数据的方法.通过该方法,用户可自定义感兴趣研究区(ROI).限定时间范围.选择产品类别.进行云量筛选,实现自动化批量下载Sentin ...

  7. 【Python】序列 列表

    序列 & 列表 序列 序列的概念 序列的分类 列表 列表的概念 列表的使用 基本操作 切片操作 常用操作 列表的修改 (1)添加 (2)删除 (3)修改 (4)排序 (5)复制 for in ...

  8. 【Python】标准数据类型

    [Python]标准数据类型 在Python中,每个变量在使用的时候必须进行赋值,赋值之后该变量会自动被创建,并且在Python中,所有的变量都没有类型,变量单纯只是变量而已,我们所说的类型只是这个变 ...

  9. 蒙特卡洛树搜索(MCTS)代码详解【python】

    前文: AlphaGo Zero 详解 后文: AlphaZero五子棋网络模型[python] 之前看了AlphaGo Zero 的整个流程,接下来就要了解一下具体怎么实现的.毕设选择做用 Alph ...

最新文章

  1. 参加软件测试培训前景怎么样
  2. TestNG并行测试
  3. JavaScript编程:文档对象模型DOM
  4. 网站如何从http升级成https
  5. C语言打印九九乘法口诀
  6. delhpi7 tcombobox清楚重复项_专利数据统计中需要搞清楚的首要问题(2)
  7. js后退页面不重新加载_快应用:支持加载单独JS文件的规范思考
  8. Eclipse添加git插件上传项目到github
  9. HDU2526 浪漫手机【模拟】
  10. python命令行参数 空格_Python 命令行参数
  11. 通过C++实现Android Native Service
  12. 自然语言处理实战:小说读取及分析(附代码)
  13. 如何扩展计算机c盘的控件,电脑C盘空间不足,怎么把c盘空间可以扩大
  14. 多目标狼群优化算法(MGWO)
  15. 【python】习题 1-4周
  16. YouTube 深度神经网络在推荐系统上的应用
  17. 更改windows 2003 密钥
  18. Java循环综合练习四之日历打印
  19. 网页设计html2017体会,2017网页设计实习报告
  20. 2022 年合肥市经开区第七届青少年信息学竞赛 小学组试题

热门文章

  1. react webpack配置
  2. ATOM基础教程一linter-php配置(12)
  3. 网易游戏AI Lab招聘计算机视觉日常实习生
  4. 如何用div+css布局页面
  5. JavaScript高级程序设计(第4版)学习随笔【第八章】
  6. oracle不足位数补零
  7. 近几年安防工程商面临的困境
  8. Mendix开发介绍实用篇(一)
  9. 2017.2.10考试总结2017冬令营
  10. 你是否对软件确认测试有了解,如何获取软件确认测试报告?