面向对象基础2

7 对象与类型

7.1 类即类型

7.1.1 变量的三个指标

  • 类型
  • id
  1. a = 10
  2. b = False
  3. c = [1, 2, 3]
  4. d = {'name': 'ccc', 'age': 18}

7.1.2 变量类型

  1. print(type(a)) # <class 'int'>
  2. print(type(b)) # <class 'bool'>
  3. print(type(c)) # <class 'list'>
  4. print(type(d)) # <class 'dict'>
  • 类即类型(type看的是这个对象的类,这个变量是哪个类的对象)

7.2 list.append()方法原理

  1. l = [1, 2, 3]
  2. # 列表追加值,对象来调,是对象的绑定方法
  3. l.append(4)
  4. # 使用另外一种方式实现列表追加
  5. # 普通函数,有几个值就要传几个值
  6. list.append(l, 5)
  7. print(l) # [1, 2, 3, 4, 5]
  8. dic = {'name': 'ccc'}
  9. # 对象来调用
  10. # name = dic.get('name') # ccc
  11. # 类来调用
  12. name = dict.get(dic, 'name') # ccc
  13. print(name)

8 对象的高度整合

8.1 通过面向过程操作爬取视频

8.1.1 步骤分析

  1. # 爬取一个视频网站,把视频的地址解析出来
  2. # 面向过程实现
  3. # 当屏幕拉到最底部(点击加载更多),浏览器向后端发了一个请求,获取到数据
  4. # xhr:只看ajax请求
  5. # 获取网站数据
  6. # https://www.pearvideo.com/category_loading.jsp?reqType=5&categoryId=1&start=0
  7. import requests # 模拟发送请求(像浏览器一样)
  8. import re # 导入正则模块
  9. # 定义一个获取该网站内容的函数
  10. def get_text(url):
  11. res = requests.get(url)
  12. return res.text
  13. # 解析,获得解析出来的地址
  14. def parser_video_url(text):
  15. video_url_list = []
  16. re_gex = '<a href="(.*?)" class="vervideo-lilink actplay">'
  17. video_list = re.findall(re_gex, text) # 去里面找符合规则的所有东西
  18. # print(video_list)
  19. # 例如[video_1712915, video_1712915, video_1712915...]
  20. for video in video_list:
  21. video_url_list.append('https://www.pearvideo.com/' + video)
  22. return video_url_list
  23. text = get_text('https://www.pearvideo.com/category_loading.jsp?reqType=5&categoryId=1&start=0')
  24. video_list = parser_video_url(text)
  25. print(video_list)

8.1.2 总结

  1. import requests
  2. import re
  3. # 获取网页内容
  4. res = requests.get('https://www.pearvideo.com/category_loading.jsp?reqType=5&categoryId=1&start=0')
  5. re_gex = '<a href="(.*?)" class="vervideo-lilink actplay">'
  6. video_list = re.findall(re_gex, res.text)
  7. video_list_url = []
  8. for video in video_list:
  9. video_list_url.append('https://www.pearvideo.com/' + video)
  10. print(video_list_url)

8.2 通过面向对象实现操作爬取视频

  1. # 使用面向对象的方式
  2. import requests
  3. import re
  4. class Video:
  5. def __init__(self, url):
  6. # 初始化的时候,把url放到对象身体里
  7. self.url = url
  8. self.video_url_list = []
  9. self.text = ''
  10. def get_video_list(self):
  11. res = requests.get(self.url)
  12. self.text = res.text
  13. re_gex = '<a href="(.*?)" class="vervideo-lilink actplay">'
  14. video_list = re.findall(re_gex, self.text) # 去里面找符合规则的所有东西
  15. for video in video_list:
  16. self.video_url_list.append('https://www.pearvideo.com/' + video)
  17. video = Video('https://www.pearvideo.com/category_loading.jsp?reqType=5&categoryId=1&start=0')
  18. print(video.text) # 空的
  19. print(video.video_url_list) # 空的
  20. video.get_video_list()
  21. print(video.get_video_list)
  22. # 拿到请求地址的页面内容
  23. print(video.text)

9 面向对象基础实战之英雄联盟

9.1 基础版

  1. # 亚瑟(战士)
  2. class Arthur:
  3. def __init__(self, nickname):
  4. self.nickname = nickname
  5. self.blood = 420 # 基础血量
  6. self.aggressivity = 25 # 基础攻击值
  7. self.armor = 15 # 基础防御值
  8. self.money = 300 # 默认金币
  9. def attack(self, obj):
  10. value = self.aggressivity - obj.armor
  11. obj.blood -= value
  12. print("亚瑟(%s) 攻击了%s一下,%s掉血%s" % (self.nickname, obj.nickname, obj.nickname, value))
  13. # 后裔(射手)
  14. class HouYi:
  15. def __init__(self, nickname):
  16. self.nickname = nickname
  17. self.blood = 275 # 基础血量
  18. self.aggressivity = 35 # 基础攻击值
  19. self.armor = 8 # 基础防御值
  20. self.money = 300 # 默认金币
  21. def attack(self, obj):
  22. value = self.aggressivity - obj.armor
  23. obj.blood -= value
  24. print("后裔(%s) 攻击了%s一下,%s掉血%s" % (self.nickname, obj.nickname, obj.nickname, value))
  25. ys = Arthur('ccc')
  26. hy = HouYi('yyy')
  27. while True:
  28. if ys.blood <= 0 or hy.blood <= 0:
  29. print('亚瑟血量:', ys.blood)
  30. print('后裔血量:', hy.blood)
  31. print("游戏结束")
  32. break
  33. ys.attack(hy)
  34. hy.attack(ys)
  35. print('亚瑟(%s)血量还剩%s' % (ys.nickname, ys.blood))
  36. print('后裔(%s)血量还剩%s' % (ys.nickname, hy.blood))

day020|python之面向对象基础2的更多相关文章

  1. python开发面向对象基础:封装

    一,封装 [封装] 隐藏对象的属性和实现细节,仅对外提供公共访问方式. [好处] 1. 将变化隔离: 2. 便于使用: 3. 提高复用性: 4. 提高安全性: [封装原则] 1. 将不需要对外提供的内 ...

  2. python开发面向对象基础:接口类&抽象类&多态&钻石继承

    一,接口类 继承有两种用途: 一:继承基类的方法,并且做出自己的改变或者扩展(代码重用) 二:声明某个子类兼容于某基类,定义一个接口类Interface,接口类中定义了一些接口名(就是函数名)且并未实 ...

  3. PYTHON开发--面向对象基础入门

    面向对象 一:面向对象初级 1.思考:首先在python中,以前我们以前用到的几乎都是函数式编程,但是有时候函数式编程其中代码重复利用率太高,我们往往会把这些重复代码写进一个函数日后去调用,所以呢,今 ...

  4. PYTHON开发--面向对象基础二

    一.成员修饰符 共有成员 私有成员, __字段名 - 无法直接访问,只能间接访问 1.     私有成员 1.1  普通方法种的私有成员 class Foo: def __init__(self, n ...

  5. python开发面向对象基础:人狗大战学面向对象

    一,通过函数写人狗大战这个故事 #!/usr/bin/env python #_*_coding:utf-8_*_ #1.函数 人模子 def person(name,level,life_value ...

  6. Python:面向对象基础

    基本理论 什么是对象 万物皆对象 对象是具体的事物 拥有属性.行为 把许多零散的东西,封装成为一个整体 Python中一切东西都是对象,Python是一门特别彻底的面向对象编程语言(OOP) 其他编程 ...

  7. python 1 面向对象基础知识

    1.编码范式 编程  是程序员用特定的 语法+数据结构+算法 组成的代码来告诉计算机如何执行任务的过程 如果把编程比作习武,编程方式就是武林中的各种流派,而在编程的世界里面最常见的两大流派是:面向过程 ...

  8. 006 python的面向对象基础

    1.类 描述具有相同属性与方法的对象的集合. 2.创建类 使用class来创建一个新类,class之后为类的名称并以冒号结尾 3.程序 #!/usr/bin/python # -*- coding: ...

  9. python开发面向对象基础:组合&继承

    一,组合 组合指的是,在一个类中以另外一个类的对象作为数据属性,称为类的组合      人类装备了武器类就是组合 1.圆环,将圆类实例后传给圆环类 #!/usr/bin/env python #_*_ ...

随机推荐

  1. 如何将MathType恢复出厂设置

    必大家都知道,我们日常使用的手机是自带恢复出厂设置功能的,其实除了手机,咱们今天要说的这款公式编辑器MathType,也是可以进行恢复出厂设置操作的哦,下面就让小编给大家介绍一下吧. 一.打开Math ...

  2. 多态,向上转型,向下转型,final关键字

    多态 概述   多态封装性,继承性之后,面向对象的第三大特性. 定义   多态:是指同一种行为,具有多个不同的表现形式.   生活中,比如跑的动作,猫,狗,大象跑起来的动作都是不一样的,再比如飞的动作 ...

  3. 一周一个中间件-hbase

    前言 hbase是大数据的生态的一部分,是高可靠性.高性能.列存储.可伸缩.实时读写的数据库系统.介于nosql和RDBMS之间.主要存储非结构化和半结构化的松散数据. 海量数据存储 快速随机访问 大 ...

  4. 这 6 个 Spring Boot 项目够经典

    不得不佩服 SpringBoot 的生态如此强大,今天我给大家推荐几款 Gitee 上优秀的后台管理系统,小伙伴们再也不用从头到尾撸一个项目了. SmartAdmin 我们开源一套漂亮的代码和一套整洁 ...

  5. day6(celery原理与组件)

    1.Celery介绍 1.1 celery应用举例 Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理,如果你的业务场景中需要用到异步任务,就可以考 ...

  6. C++ 虚基类的定义、功能、规定

    原文声明:http://blog.sina.com.cn/s/blog_93b45b0f01011pkz.html 虚继承和虚基类的定义是非常的简单的,同时也是非常容易判断一个继承是否是虚继承的,虽然 ...

  7. 转:HTTP协议简介与在python中的使用详解

    1. 使用谷歌/火狐浏览器分析 在Web应用中,服务器把网页传给浏览器,实际上就是把网页的HTML代码发送给浏览器,让浏览器显示出来.而浏览器和服务器之间的传输协议是HTTP,所以: HTML是一种用 ...

  8. PyQt(Python+Qt)学习随笔:Qt Designer中部件的accessibleDescription和accessibleName辅助阅读属性

    accessibleDescription和accessibleName属性都是用于残疾人辅助阅读的,这两个属性都有国际化属性(关于国际化请参考<PyQt(Python+Qt)学习随笔:Qt D ...

  9. BJOI2015 隐身术

    落谷. Description 给你两个串 \(A.B\).询问 \(B\) 中有多少个非空子串和 \(A\) 的编辑距离不超过 \(K\). Solution 发现 \(K \le 5\),考虑可以 ...

  10. AcWing 345. 牛站 Cow Relays

    由于我太菜了,不会矩阵乘法,所以给同样不会矩阵乘法同学的福利 首先发现这题点很多边很少,实际上有用的点 \(<= 2 * T\)(因为每条边会触及两个点嘛) 所以我们可以把点的范围缩到 \(2 ...