62.类的3要素语法
文章目录
- 62.类的3要素语法
- 1. 定义类的语法
- 2. pass语句的作用
- 3.我们学的5个缩进语法
- 4.类的属性
- 5.类的方法
- 6. 创建对象
- 7.类在爬虫中的应用
- 8. 总结
1. 定义类的语法
定义类的语法如下:
class 类名:
代码块
从语法上来看:类的定义是一个 class 语句,class 语句内包含了四个要素:
① 关键字class
② 类名,类名要大写
③ 英文冒号:
④ 代码块,代码块前有4个空格的缩进
【体验代码】
# 定义一个车类,类名为Cars
class Cars:
pass
-
定义类时首先要先敲一个
class
关键字 -
在
class
关键字后面跟上类名Cars
,注意这里的类名是大写。 -
类名后跟上一个英文冒号
:
-
pass
空语句,注意pass
空语句前有4个空格的缩进
【温馨提示】
1. 类名的首字母要大写。
这里的Cars
就是类名,它的首字母C
就是大写。
首字母大写不是Python中的语法要求,可以理解成是一种程序员之间一种约定,让大家看到大写就知道是类。
类名是小写也不会报错,但大写是为了让其他程序员都能读懂你的代码,显的你也很专业!
2. 代码块前有4个空格的缩进。
2. pass语句的作用
pass空语句用于维持程序结构的完整。
我们在编程时若不想马上编写某些代码,又不想有语法错误,就可以用pass语句占位。
pass 语句是不会有任何输出内容的,他的存在是替代代码块,使程序不会报错。
我在这里使用pass空语句,是为了让使代码简洁,让大家更直观的感受类的语法结构。
3.我们学的5个缩进语法
-
if 条件判断语句
-
for 循环语句
-
while循环语句
-
自定义函数
-
定义类
4.类的属性
红色的小轿车具有前进、刹车、倒车的基础功能。
蓝色的公交车也具有前进、刹车、倒车的基础功能。
确定类名:车类
确定属性:颜色、车型
确定方法:前进、刹车、倒车
类的定义完成之后,我们来编写类的属性。
直接写在类里的变量称为类属性。
属性的添加很简单,就是一个变量赋值语句。
【属性1:颜色】
color_1 = ‘红色’
color_2 = ‘蓝色’
color就是变量名,红色就是给变量赋的值。
【属性2:车型】
为了不增加大家的英语单词量,这里用type来表示车型。
type_1 = “小轿车”
type_2 = “公家车”
定义属性直接在类里写一个变量赋值的语句即可。
# 定义一个车类,类名为Cars
class Cars:
# 直接写在类里的变量称为类属性
color_1 = "红色"
type_1 = "小轿车"
【代码解析】
color_1
是变量名,"红色"
是给变量赋的值。
type_1
是变量名,"小轿车"
是给变量赋的值。
color_1 = "红色"
和type_1 = "小轿车"
这2个语句就是类的属性。
【总结】
属性,就是类创建出来的对象具有的特征。
直接写在类里的变量称为类属性。
5.类的方法
在类中定义方法的语法,跟我们之前学习过的定义函数是非常像的,也是一个def
语句。
区别是:
在类之外定义的函数我们称之为自定义函数。
在类中被定义的函数称之为类的方法。
方法定义的语法如下:
class 类名 :
def 方法名1(self , 其它参数):
代码块
def 方法名2(self , 其它参数):
代码块
-
定义方法时首先要先敲一个
def
关键字 -
在
def
关键字后面跟上方法名
-
方法名后输入英文圆括号
()
-
括号中输入的是方法的参数。
注意注意注意,方法的第一个参数必须是self
如果self后面有参数,就增加上参数,如果没有参数,就保证这个方法至少有一个self
参数即可。
一般在类中定义方法第一个参数都是 self
参数,通常用来指对象本身。
self
参数背后涉及的原理较多,大家不需要深纠,把它当作一个固定格式即可。
-
英文冒号
:
-
冒号之后是代码块,是方法要封装的功能。
【代码实操】
红色的小轿车具有前进、刹车、倒车的基础功能。
确定方法:前进、刹车、倒车
我们先写第一个方法:前进
前进的功能我们给它起个方法名叫drive
# 定义一个车类,类名为Cars
class Cars:
# 直接写在类里的变量称为类属性
color_1 = "红色"
type_1 = "小轿车"
# 汽车的基础功能之1:前进
# 类的第1个方法
def drive(self):
print('汽车正在向前行驶!')
【代码解析】
-
定义方法的
def
关键字 -
方法名
drive
-
英文圆括号
()
-
括号中必须加入必要参数
self
-
英文冒号
:
-
冒号下面是方法中的代码块,代码块是方法要封装的功能。这里用一个print语句替代,是为有个输出语句,让大家理解后面的调用。
Python实例中要封装的功能通常有访问网页、解析网页数据、保存爬取到的网页数据等等。
【课堂练习】
请编写代码,定义类剩下的2个方法。
确定方法:前进、刹车、倒车
考虑到很多同学的单词量。
这里刹车方法名用stop
命名,stop
方法的代码块内容为输出汽车来了个急刹!
倒车方法名用back
命名,back
方法的代码块内容为输出请注意,倒车!
【体验代码】
# 定义一个车类,类名为Cars
class Cars:
# 直接写在类里的变量称为类属性
color_1 = "红色"
type_1 = "小轿车"
# 汽车的基础功能之1:前进
# 类的第1个方法
def drive(self):
print('汽车正在向前行驶!')
# 汽车的基础功能之2:刹车
# 类的第2个方法
def stop(self):
print('汽车来了个急刹!')
# 汽车的基础功能之3:倒车
# 类的第3个方法
def back(self):
print('请注意,倒车!')
6. 创建对象
我们之前讲过,类的作用是创建对象。
现在类的三要素已经齐全了,那我们接下来就可以创建对象了。
这就相当于菜洗好、切好后,接下来就要开始炒菜了。
当我们定义好一个类之后,如果想要创建一个对象,首先给对象起一个名字,也就是一个变量名。
生了宝宝后,要给宝宝起个名字。
我们做的每道菜也有它自己的名字。
类创建对象后,我们也要给它起个名字,要不然我们都不知道对象叫啥。
生产汽车我们通常会根据汽车的品牌、型号等给车命名,要不然都是4个轮子,一个发动机,没有名字我们也区分不开。
这里我们给我们马上要生产好的小轿车起个名字叫奥迪A6。
对象创建的语法如下:
对象名=类名()
等号的左边我们写给生产对象起的名字。
等号右边写类名,表示这个对象是根据这个类生产出来的。
类名后紧跟一对英文圆括号
【体验代码】
注意观察最后一行代码。
# 定义一个车类,类名为Cars
class Cars:
# 直接写在类里的变量称为类属性
color_1 = "红色"
type_1 = "小轿车"
# 汽车的基础功能之1:前进
# 类的第1个方法
def drive(self):
print('汽车正在向前行驶!')
# 汽车的基础功能之2:刹车
# 类的第2个方法
def stop(self):
print('汽车来了个急刹!')
# 汽车的基础功能之3:倒车
# 类的第3个方法
def back(self):
print('请注意,倒车!')
# 创建对象
aodi_A6 = Cars( )
【代码解析】
-
等号左边是对象名
aodi_A6
-
等号右边是类名
Cars
-
类名后紧跟一对英文圆括号
通过aodi_A6 = Cars( )
这行代码,我们就利用Cars( )
类创建出了一个aodi_A6
对象。
7.类在爬虫中的应用
类的知识点相对抽象,初学者很难理解,下面我们通过一个实例来更深层次的理解类的作用。
下面是爬取某站视频的部分代码,大家重点关注类相关的知识点即可。
【备注】下面的代码不全,运行下面的代码是不会成功下载到视频的。
'''批量下载视频'''
import requests # 网络请求模块
import time # 时间模块
import random # 随机模块
import os # 操作系统模块
import re # 正则表达式
# 哔哩哔哩小视频json地址
json_url = 'http://api.vc.bilibili.com/board/v1/ranking/top?page_size=10&next_offset={page}1&tag=%E4%BB%8A%E6%97%A5%E7%83%AD%E9%97%A8&platform=pc'
# 定义一个爬虫类,类名为Crawl
class Crawl():
def __init__(self):
# 创建头部信息
self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0'}
# 类中定义的第1个方法,作用是访问网页
def get_json(self,json_url):
response = requests.get(json_url, headers=self.headers)
# 判断请求是否成功
if response.status_code == 200:
return response.json() # 返回json信息
else:
print('获取json信息的请求没有成功!')
# 类中定义的第2个方法,作用是下载视频
def download_video(self,video_url,titlename):
# 下载视频的网络请求
response = requests.get(video_url, headers=self.headers, stream=True)
if not os.path.exists('video'): # 如果video目录不存在时
os.mkdir('video') # 创建该目录
if response.status_code == 200: # 判断请求是否成功
if os.path.exists('video'):
with open('video/'+titlename+'.mp4', 'wb')as f: # 将视频写入指定位置
for data in response.iter_content(chunk_size=1024): # 循环写入,实现一段一段的写
f.write(data) # 写入视频文件
f.flush() # 刷新缓存
print('下载完成!')
else:
print('视频下载失败!')
# 创建爬虫类对象:对象名=类名()
c = Crawl()
【代码解析】
crawl[krɔːl]:爬虫
class Crawl():
定义一个爬虫类,类名为Crawl。
def get_json(self,json_url):
类中定义的第1个方法,作用是访问网页,获取网页的json数据。方法中的第1个参数为self
。
def download_video(self,video_url,titlename):
类中定义的第2个方法,作用是下载视频。方法中的第1个参数为self
。
c = Crawl()
创建爬虫类对象。创建对象的语法是对象名=类名()
。c
是对象名,Crawl()
是类名。