• Python趣味入门12:初遇类与实例


    小牛叔用轻松有趣的故事,带你进入Python的编程世界。

    1、类

    一提到类大神们就经常说封装。说白了,封装即把围绕同一个对象相同的代码、数据整合在一起。比如在某段游戏代码中(比如熊猫厨房),有一个“面包”:

    1、游戏提供“烘烤”的操作。 -> 很明显这是动作 -> 类的方法

    2、面包有硬度指数 -> 很明显这是数据 -> 类的属性

    从一般情况看,“动作”可以通过编写函数完成,比如上面的“烧烤”,游戏可以通过函数绘制出烤箱烤面包的画面。“数据”就只通过变量来保存值就行,比如上面的“硬度”,我们可以通过0-10的数字去表示。

    以上即包括函数又包括数据的结构,由于是服务于同一个对象的,所以就叫面向对象。

    这是小牛叔最喜欢吃的“面包”

    3、实例

    “实例”就是“类‘的”值“,类相当于蓝本,实例相当于不同的个体。我们继续玩熊猫厨房的游戏,实际在游戏在完的过程中,每个人的屏幕上都会出现“面包”,这些个张三的面包、李四的面包就叫实例。这些个实例不一定有相同的属性值比如“硬度”不同,但是却是共享着相同的属性名称与方法,像是同一个蓝本里刻出来的。

    比如在Python中所有的整数,只要出现的整数其实都是int这个类的实例。

    Python系统当中大部分的东东都是类,我们之前学习的str-字符串,int-整数,其实都是不同的类,我们用type这个语句就可以查看某个实例是什么类。

    type语句 - 某个值(实例)是什么类

    3、定义类

    在此分析一下"面包"的属性:

    • slices:指使用了几片切片
    • condiments:面包上配料的列表,比如番茄酱、芥末酱等
    • cooked_level:一个数字,通过这个属性知道面包被烤程度
    • cooked_string:一个字符串,描述面包烤出来的软硬程度

    再来分析一下面包的方法:

    • cook():把面包片烤一段时间,这会让面包比较硬容易抹黄油
    • add_slice():加入一个切片
    • add_condiment():加入一些配料

    3.1 __int__() 初始化方法

    首先定义类中的4个属性,属性我们通过在类中定义__init__()函数来实现,这个函数名称每个类都一样,系统在实例被生时首先执行这个函数的代码,并且把实例传递到self这个变量当中,因此我们在这个方法中,为面包设置如下的属性,并且设置默认属性。

    复制代码
    1 class bread:
    2     def __init__(self):
    3         self.cooked_level = 0
    4         self.cooked_string = 'Soft'
    5         self.condiments = []
    6         self.slices = 1
    复制代码

     

    如上的代码,self后紧跟的点号是引用实例的成员,如果不存在会被创建, 上述初始化方法当中,定义了一个没有经过烤时间为0,非常软并且没有任何酱料的1小片切片白面包。

    3.2 定义其它方法

    下面我们定义烤面包的方法,我们在class下面,再创建函数用来表示,这个cook函数的第1个参数self是系统要求的实例,并且根据烹饪时间来设置面包的状态。

    复制代码
    class Bread:
        def __init__(self):
            self.cooked_level = 0
            self.cooked_string = '软嫩'
            self.condiments = []
            self.slices = 1
        def cook(self,time):
            self.cooked_level += time
            if self.cooked_level>=10:
                self.cooked_string = '焦糊'
            elif self.cooked_level>=8:
                self.cooked_string = '硬脆'
            elif self.cooked_level>=6:
                self.cooked_string = '适中'
            elif self.cooked_level>=3:
                self.cooked_string = '稍软'
            else:
                self.cooked_string = '软嫩'
    复制代码

     

    可以看到我们通过cook这个动作,函数可以根据烤的时间来改变面包的软硬属性cooked_string。

    假设游戏刚开始,Joe刚开始准备烤面包, 在同一个文件里,我们接着顶格写如下的代码:

    1
    2
    3
    4
    5
    joeBread = Bread()
    print("烤时间",joeBread.cooked_level)
    print("切片数",joeBread.slices)
    print("口感",joeBread.cooked_string)
    print("配料",joeBread.condiments)

      

    运行的结果如下:

    1
    2
    3
    4
    烤时间 0
    切片数 1
    口感 软嫩
    配料 []

      

    此外,还要注意到目前为止,定义类的时候目前均是采取首字母大写的方式,在Python代码约定当中,Word一般是作为类名,而word则是作为实例名称,这样通过观察变量或是类的名称,就知道所代表的意义。

    然后再试试cook这个方法有没有效果,在上面的语句后面继续填加如下的语句:

    1 print('Joe开始烤8分钟')
    2 joeBread.cook(8)
    3 print("口感",joeBread.cooked_string)
    4 print("烤时间",joeBread.cooked_level)

     

    这些语句的运行的结果如下图:

    Joe开始烤8分钟
    口感 硬脆
    烤时间 8

    以上编写的cook() 方法可以正常工作,经验证面包被烤了8分钟后,不仅烤时发生了变化,而且面包的口味果然变成了“硬脆”的状态,小牛叔可不喜欢吃硬的!

     

    ---小牛书0基础Python系列教程---

    【每天1篇1周入门,请点击下方的喜欢和收藏,以备学习】

  • 相关阅读:
    在 Python 中创建 Getter 和 Setter
    RabbitMQ 安装
    有什么软件能实现erp、crm、oa、财务系统一体化?
    如何在云计算平台上完成分子对接
    从Endnote导入Zotero(含PDF)
    基于Matlab实现自动泊车(垂直泊车)
    Nacos Discovery--服务治理
    Hbase相关总结
    总监调岗至前台,企业被判赔偿26万,法院:“侮辱性调岗”违法
    【Axios封装示例Vue2】
  • 原文地址:https://www.cnblogs.com/dosboy/p/17937319