day020|python之面向对象基础2

面向对象基础2

7 对象与类型

7.1 类即类型

7.1.1 变量的三个指标

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

7.1.2 变量类型

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

7.2 list.append()方法原理

l = [1, 2, 3]
# 列表追加值,对象来调,是对象的绑定方法
l.append(4)

# 使用另外一种方式实现列表追加
# 普通函数,有几个值就要传几个值
list.append(l, 5)
print(l)  # [1, 2, 3, 4, 5]

dic = {'name': 'ccc'}

# 对象来调用
# name = dic.get('name')  # ccc
# 类来调用
name = dict.get(dic, 'name')  # ccc
print(name)

8 对象的高度整合

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

8.1.1 步骤分析

# 爬取一个视频网站,把视频的地址解析出来

# 面向过程实现
# 当屏幕拉到最底部(点击加载更多),浏览器向后端发了一个请求,获取到数据
# xhr:只看ajax请求
# 获取网站数据
# https://www.pearvideo.com/category_loading.jsp?reqType=5&categoryId=1&start=0

import requests  # 模拟发送请求(像浏览器一样)
import re  # 导入正则模块

# 定义一个获取该网站内容的函数
def get_text(url):
    res = requests.get(url)
    return res.text

# 解析,获得解析出来的地址
def parser_video_url(text):
    video_url_list = []
    re_gex = '<a href="(.*?)" class="vervideo-lilink actplay">'
    video_list = re.findall(re_gex, text)  # 去里面找符合规则的所有东西
    # print(video_list)
    # 例如[video_1712915, video_1712915, video_1712915...]
    for video in video_list:
        video_url_list.append('https://www.pearvideo.com/' + video)
    return video_url_list

text = get_text('https://www.pearvideo.com/category_loading.jsp?reqType=5&categoryId=1&start=0')
video_list = parser_video_url(text)
print(video_list)

8.1.2 总结

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

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

# 使用面向对象的方式
import requests
import re

class Video:
    def __init__(self, url):
        # 初始化的时候,把url放到对象身体里
        self.url = url
        self.video_url_list = []
        self.text = ''

    def get_video_list(self):
        res = requests.get(self.url)
        self.text = res.text
        re_gex = '<a href="(.*?)" class="vervideo-lilink actplay">'
        video_list = re.findall(re_gex, self.text)  # 去里面找符合规则的所有东西
        for video in video_list:
            self.video_url_list.append('https://www.pearvideo.com/' + video)

video = Video('https://www.pearvideo.com/category_loading.jsp?reqType=5&categoryId=1&start=0')
print(video.text)  # 空的
print(video.video_url_list)  # 空的

video.get_video_list()
print(video.get_video_list)

# 拿到请求地址的页面内容
print(video.text)

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

9.1 基础版

# 亚瑟(战士)
class Arthur:
    def __init__(self, nickname):
        self.nickname = nickname
        self.blood = 420  # 基础血量
        self.aggressivity = 25  # 基础攻击值
        self.armor = 15  # 基础防御值
        self.money = 300  # 默认金币

    def attack(self, obj):
        value = self.aggressivity - obj.armor
        obj.blood -= value
        print("亚瑟(%s) 攻击了%s一下,%s掉血%s" % (self.nickname, obj.nickname, obj.nickname, value))


# 后裔(射手)
class HouYi:
    def __init__(self, nickname):
        self.nickname = nickname
        self.blood = 275  # 基础血量
        self.aggressivity = 35  # 基础攻击值
        self.armor = 8  # 基础防御值
        self.money = 300  # 默认金币

    def attack(self, obj):
        value = self.aggressivity - obj.armor
        obj.blood -= value
        print("后裔(%s) 攻击了%s一下,%s掉血%s" % (self.nickname, obj.nickname, obj.nickname, value))

ys = Arthur('ccc')
hy = HouYi('yyy')

while True:
    if ys.blood <= 0 or hy.blood <= 0:
        print('亚瑟血量:', ys.blood)
        print('后裔血量:', hy.blood)
        print("游戏结束")
        break
    ys.attack(hy)
    hy.attack(ys)
    print('亚瑟(%s)血量还剩%s' % (ys.nickname, ys.blood))
    print('后裔(%s)血量还剩%s' % (ys.nickname, hy.blood))
posted @ 2020-12-22 22:01  drrug  阅读(58)  评论(0编辑  收藏  举报