面向对象编程
炒菜机器人.作菜('西红柿炒鸡蛋')
复制代码
就像咱们能够用
def
语句来自定义一个函数,咱们用class
语句来自定义一个类。
# 语法:建立一个名为“ClassName”的类,类名通常首字母要大写,(): 不能丢
class ClassName():
# 如定义一个名为'狗'的类,能够写成class Dog():
# 规范:class语句后续的代码块要缩进
def function1():
# 定义类中的函数1
复制代码
class 类A():
def 函数1():
print('报道!我是类A的第一个方法!')
def 函数2():
print('报道!我是类A的第二个方法!')
def 函数3():
print('报道!我是类A的第三个方法!')
复制代码
咱们使用
类名.函数名()
的格式,就可让类的方法运行起来
class 类A():
def 函数1():
print('报道!我是类A的第一个方法!')
def 函数2():
print('报道!我是类A的第二个方法!')
def 函数3():
print('报道!我是类A的第三个方法!')
类A.函数1()
类A.函数2()
类A.函数3()
复制代码
类里面, 也能够加变量...
class 类A():
变量1 = 100
变量2 = -5.83
变量3 = 'abc'
复制代码
使用
类名.变量名
的格式,能够把类中的属性的值提取出来
class 类A():
变量1 = 100
变量2 = -5.83
变量3 = 'abc'
# 这里须要用print语句,才能把提取出的数值打印到屏幕上
print(类A.变量1)
print(类A.变量2)
print(类A.变量3)
复制代码
变量能够输出, 也能够赋值
我有一个智能机器人...
class 智能机器人():
胸围 = 33
腰围 = 44
臀围 = 55
# 以上为类属性
def 打招呼():
print('主人你好!')
def 卖萌():
print('主人,求抱抱!')
def 生气():
print('主人,我要报警了!')
复制代码
添加智商200, 添加奔跑, 输出('我快乐的奔跑 奔跑 ...... 哎哟喂! 撞墙了. ')
class 智能机器人():
胸围 = 33
腰围 = 44
臀围 = 55
智商 = 200
# 以上为类属性
def 打招呼():
print('主人你好!')
def 卖萌():
print('主人,求抱抱!')
def 生气():
print('主人,我要报警了!')
def 奔跑():
print('我快乐的奔跑, 奔跑 ... 哎哟喂, 撞墙了...')
智能机器人.奔跑()
复制代码
方法和函数的区别
类.函数名()
比函数名()
多了一个【类.】,但更重要的是,“类”中的函数能够利用“类”中的变量(也就是类方法能够调用类属性)。
猜猜代码是干吗的?
class 类A():
变量1 = 100
变量2 = 200
@classmethod
def 函数1(cls):
print(cls.变量1)
print(cls.变量2)
类A.函数1()
复制代码
让机器人自爆三维
给类方法传参
对于函数, 参数仅供内部使用...
def 加100函数(参数):
总和 = 参数 + 100
print('计算结果以下:')
print(总和)
参数 = 1
加100函数(参数)
复制代码
改为面向对象...
# 请直接运行并体验代码效果
class 加100类():
def 加100函数(参数):
总和 = 参数 + 100
print('计算结果以下:')
print(总和)
参数 = 1
加100类.加100函数(参数)
复制代码
面向过程转面向对象
一首诗 = ['《卜算子》','我住长江头,','君住长江尾。','日日思君不见君,','共饮长江水。']
def 念诗函数(参数):
for i in 参数:
print(i)
念诗函数(一首诗)
复制代码
外部传参
一首诗 = ['《卜算子》', '我住长江头,', '君住长江尾。', '日日思君不见君,', '共饮长江水。']
class 念诗类():
def 念诗函数(参数):
for i in 参数:
print(i)
念诗类.念诗函数(一首诗)
复制代码
内部传参
class 念诗类():
一首诗 = ['《卜算子》', '我住长江头,', '君住长江尾。', '日日思君不见君,', '共饮长江水。']
@classmethod
def 念诗函数(cls):
for i in cls.一首诗:
print(i)
念诗类.念诗函数()
复制代码
类方法同时使用内部参数和外部参数
class 加100类():
变量 = 100
@classmethod
def 加100函数(cls, 参数):
总和 = cls.变量 + 参数
print('加100函数计算结果以下:')
print(总和)
参数 = int(input('请输入一个整数:'))
加100类.加100函数(参数)
复制代码
class 加100类():
变量 = 100
@classmethod
def 加100函数(cls, 参数1, 参数2, 参数3):
总和 = cls.变量 + 参数1 + 参数2 + 参数3
print('加100函数计算结果以下:')
print(总和)
参数1 = int(input('请输入一个整数:'))
参数2 = int(input('请输入一个整数:'))
参数3 = int(input('请输入一个整数:'))
加100类.加100函数(参数1, 参数2, 参数3) # 不用显示的传入
复制代码
增长/修改类属性
有两种途径来增长或修改类属性。
一种是从内部,用
类方法
去增长/修改;另外一种是从外部,用
类.变量 = xx
直接增长/修改类属性。
class 类A():
pass
类A.变量1 = 100
print(类A.变量1)
复制代码
试分析结果
变量1 = 15
#这是类外部的变量1
变量2 = 'abc'
class 类A():
变量1 = 100
#这是类属性变量1
变量1 = 类A.变量1
类A.变量2 = 变量2
print(类A.变量1)
print(类A.变量2)
复制代码
试说出代码的结果
class 类():
@classmethod
def 打印类属性(cls):
print(cls.变量)
类.变量 = input('请输入字符串:')
类.打印类属性()
复制代码
从外部接收一个变量, 保存为类属性
你的幸运数是多少?请输入一个整数。(用户输入:66)
好的,我把它存了起来,而后翻了888倍还给你:58608
复制代码
class 幸运():
@classmethod
def 好运翻倍(cls):
print('好的,我把它存了起来,而后翻了888倍还给你:' + str(cls.幸运数*888))
# 或者这样写也能够:
# print('好的,我把它存了起来,而后翻了888倍还给你:%d' % (cls.幸运数*888))
幸运.幸运数 = int(input('你的幸运数是多少?请输入一个整数。'))
幸运.好运翻倍()
复制代码
类的内部增长/修改类属性。
class 念诗类():
一首诗 = ['《卜算子》','我住长江头,','君住长江尾。','日日思君不见君,','共饮长江水。']
@classmethod
def 念诗函数(cls,参数):
print('念给'+ 参数 +'的诗:')
for i in cls.一首诗:
print(i)
念诗类.念诗函数('张三')
复制代码
想要的效果
请输入你想给谁念诗:(用户输入“张三”)
念给张三的诗:
《卜算子》
我住长江头,
君住长江尾。
日日思君不见君,
共饮长江水。
复制代码
代码以下
class 念诗类():
一首诗 = ['《卜算子》','我住长江头,','君住长江尾。','日日思君不见君,','共饮长江水。']
@classmethod
def 念诗函数(cls):
cls.接收人 = input('请输入你想给谁念诗:')
print('念给'+ cls.接收人 +'的诗:')
for i in cls.一首诗:
print(i)
念诗类.念诗函数()
复制代码
实操: 保存学生成绩
class 成绩单():
@classmethod
def 录入成绩单(cls):
cls.学生姓名 = input('请输入学生姓名:')
cls.语文_成绩 = int(input('请输入语文成绩:'))
成绩单.录入成绩单()
print(成绩单.学生姓名 + '的成绩单以下:')
print('语文成绩:'+ str(成绩单.语文_成绩))
复制代码
class 成绩单():
@classmethod
def 录入成绩单(cls):
cls.学生姓名 = input('请输入学生姓名:')
cls.语文_成绩 = int(input('请输入语文成绩:'))
@classmethod
def 打印成绩单(cls):
print(cls.学生姓名 + '的成绩单以下:')
print('语文成绩:'+ str(cls.语文_成绩))
成绩单.录入成绩单()
成绩单.打印成绩单()
复制代码
增长一行数学成绩
class 成绩单():
@classmethod
def 录入成绩单(cls):
cls.学生姓名 = input('请输入学生姓名:')
cls.语文_成绩 = int(input('请输入语文成绩:'))
cls.数学_成绩 = int(input('请输入数学成绩:'))
@classmethod
def 打印成绩单(cls):
print(cls.学生姓名 + '的成绩单以下:')
print('语文成绩:'+ str(cls.语文_成绩))
print('数学成绩:'+ str(cls.数学_成绩))
成绩单.录入成绩单()
复制代码
还想打印平均分
class 成绩单():
@classmethod
def 录入成绩单(cls):
cls.学生姓名 = input('请输入学生姓名:')
cls.语文_成绩 = int(input('请输入语文成绩:'))
cls.数学_成绩 = int(input('请输入数学成绩:'))
@classmethod
def 打印成绩单(cls):
print(cls.学生姓名 + '的成绩单以下:')
print('语文成绩:'+ str(cls.语文_成绩))
print('数学成绩:'+ str(cls.数学_成绩))
@classmethod
def 打印平均分(cls):
平均分 = (cls.语文_成绩 + cls.数学_成绩)/2
print(cls.学生姓名 + '的平均分是:' + str(平均分))
成绩单.录入成绩单()
成绩单.打印成绩单()
成绩单.打印平均分()
复制代码
我还想多一个评级
@classmethod
def 评级(cls):
平均分 = (cls.语文_成绩 + cls.数学_成绩)/2
if 平均分>=90:
print(cls.学生姓名 + '的评级是:优')
elif 平均分>= 80 and 平均分<90 :
print(cls.学生姓名 + '的评级是:良')
elif 平均分>= 60 and 平均分<80 :
print(cls.学生姓名 + '的评级是:中')
else:
print(cls.学生姓名 + '的评级是:差')
成绩单.录入成绩单()
复制代码
方法嵌套(同一个类之中, 方法互调)
class 成绩单():
@classmethod
def 录入成绩单(cls):
cls.学生姓名 = input('请输入学生姓名:')
cls.语文_成绩 = int(input('请输入语文成绩:'))
cls.数学_成绩 = int(input('请输入数学成绩:'))
@classmethod
def 计算平均分(cls):
平均分 = (cls.语文_成绩 + cls.数学_成绩)/2
return 平均分
@classmethod
def 评级(cls):
平均分 = cls.计算平均分()
if 平均分>=90:
print(cls.学生姓名 + '的评级是:优')
elif 平均分>= 80 and 平均分<90 :
print(cls.学生姓名 + '的评级是:良')
elif 平均分>= 60 and 平均分<80 :
print(cls.学生姓名 + '的评级是:中')
else:
print(cls.学生姓名 + '的评级是:差')
成绩单.录入成绩单()
成绩单.评级()
复制代码
小练习
为类calendar添加两个方法:一个删除完成项,一个添加新增项。
因为日程安排是事情和时间的配对,因此咱们用字典来存放:
{'给父母买礼物':'9:00', '学习':'10:00', '和朋友聚会':'18:30'}
接下来,须要你新建两个类方法,从而实现字典中的数据增减。
复制代码
须要的效果:
猫哥教你写爬虫 000--开篇.md
猫哥教你写爬虫 001--print()函数和变量.md
猫哥教你写爬虫 002--做业-打印皮卡丘.md
猫哥教你写爬虫 003--数据类型转换.md
猫哥教你写爬虫 004--数据类型转换-小练习.md
猫哥教你写爬虫 005--数据类型转换-小做业.md
猫哥教你写爬虫 006--条件判断和条件嵌套.md
猫哥教你写爬虫 007--条件判断和条件嵌套-小做业.md
猫哥教你写爬虫 008--input()函数.md
猫哥教你写爬虫 009--input()函数-人工智能小爱同窗.md
猫哥教你写爬虫 010--列表,字典,循环.md
猫哥教你写爬虫 011--列表,字典,循环-小做业.md
猫哥教你写爬虫 012--布尔值和四种语句.md
猫哥教你写爬虫 013--布尔值和四种语句-小做业.md
猫哥教你写爬虫 014--pk小游戏.md
猫哥教你写爬虫 015--pk小游戏(全新改版).md
猫哥教你写爬虫 016--函数.md
猫哥教你写爬虫 017--函数-小做业.md
猫哥教你写爬虫 018--debug.md
猫哥教你写爬虫 019--debug-做业.md
猫哥教你写爬虫 020--类与对象(上).md
猫哥教你写爬虫 021--类与对象(上)-做业.md
猫哥教你写爬虫 022--类与对象(下).md
猫哥教你写爬虫 023--类与对象(下)-做业.md
猫哥教你写爬虫 024--编码&&解码.md
猫哥教你写爬虫 025--编码&&解码-小做业.md
猫哥教你写爬虫 026--模块.md
猫哥教你写爬虫 027--模块介绍.md
猫哥教你写爬虫 028--模块介绍-小做业-广告牌.md
猫哥教你写爬虫 029--爬虫初探-requests.md
猫哥教你写爬虫 030--爬虫初探-requests-做业.md
猫哥教你写爬虫 031--爬虫基础-html.md
猫哥教你写爬虫 032--爬虫初体验-BeautifulSoup.md
猫哥教你写爬虫 033--爬虫初体验-BeautifulSoup-做业.md
猫哥教你写爬虫 034--爬虫-BeautifulSoup实践.md
猫哥教你写爬虫 035--爬虫-BeautifulSoup实践-做业-电影top250.md
猫哥教你写爬虫 036--爬虫-BeautifulSoup实践-做业-电影top250-做业解析.md
猫哥教你写爬虫 037--爬虫-宝宝要听歌.md
猫哥教你写爬虫 038--带参数请求.md
猫哥教你写爬虫 039--存储数据.md
猫哥教你写爬虫 040--存储数据-做业.md
猫哥教你写爬虫 041--模拟登陆-cookie.md
猫哥教你写爬虫 042--session的用法.md
猫哥教你写爬虫 043--模拟浏览器.md
猫哥教你写爬虫 044--模拟浏览器-做业.md
猫哥教你写爬虫 045--协程.md
猫哥教你写爬虫 046--协程-实践-吃什么不会胖.md
猫哥教你写爬虫 047--scrapy框架.md
猫哥教你写爬虫 048--爬虫和反爬虫.md
猫哥教你写爬虫 049--完结撒花.mdhtml