猫哥教你写爬虫 020--类与对象(上)

面向对象编程

炒菜机器人.做菜('西红柿炒鸡蛋')
复制代码

就像我们可以用def语句来自定义一个函数,我们用class语句来自定义一个类。

# 语法:创建一个名为“ClassName”的类,类名一般首字母要大写,(): 不能丢   
class ClassName():
# 如定义一个名为'狗'的类,可以写成class Dog():
    # 规范:class语句后续的代码块要缩进  
    def function1():
    # 定义类中的函数1
复制代码
classA():
    def 函数1():
        print('报道!我是类A的第一个方法!')
    def 函数2():
        print('报道!我是类A的第二个方法!')
    def 函数3():
        print('报道!我是类A的第三个方法!')
复制代码

我们使用类名.函数名()的格式,就可以让类的方法运行起来

classA():
    def 函数1():
        print('报道!我是类A的第一个方法!')
    def 函数2():
        print('报道!我是类A的第二个方法!')
    def 函数3():
        print('报道!我是类A的第三个方法!')
类A.函数1()
类A.函数2()
类A.函数3()
复制代码

类里面, 也可以加变量...

classA():
    变量1 = 100
    变量2 = -5.83
    变量3 = 'abc'
复制代码

使用类名.变量名的格式,可以把类中的属性的值提取出来

classA():
    变量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('我快乐的奔跑, 奔跑 ... 哎哟喂, 撞墙了...')
智能机器人.奔跑()
复制代码

方法和函数的区别

类.函数名()函数名()多了一个【类.】,

但更重要的是,“类”中的函数可以利用“类”中的变量(也就是类方法可以调用类属性)。

猜猜代码是干嘛的?

classA():
    变量1 = 100
    变量2 = 200
    @classmethod
    def 函数1(cls):
        print(cls.变量1)
        print(cls.变量2)
类A.函数1()
复制代码

让机器人自爆三维

给类方法传参

对于函数, 参数仅供内部使用...

def 加100函数(参数):
    总和 = 参数 + 100
    print('计算结果如下:')
    print(总和)
参数 = 1100函数(参数)
复制代码

改成面向对象...

# 请直接运行并体验代码效果
class 加100类():
    def 加100函数(参数):
        总和 = 参数 + 100
        print('计算结果如下:')
        print(总和)
参数 = 1100类.加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直接增加/修改类属性。

classA():
    pass
类A.变量1 = 100
print(类A.变量1)
复制代码

试分析结果

变量1 = 15
#这是类外部的变量1
变量2 = 'abc'
classA():
    变量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--完结撒花.md

转载于:https://juejin.im/post/5cfc4ad8f265da1b7c610b39

猜你喜欢

转载自blog.csdn.net/weixin_34320159/article/details/91449213
今日推荐