小牛叔讲Python第12章:面向对象类与实例(Class入门)

上一篇:小牛叔讲Python第11章:函数的高级用法以及匿名函数

下一篇:小牛叔讲Python第13章:类Class中的各种变量类型

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

1、类

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

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

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

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

以上即包括函数又包括数据的结构,因为服务于同一个对象,集中写在一起就叫面向对象。

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

2、实例

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

再比如,Python中所有的整数,其实都是int这个类的实例。

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

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

3、定义类

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

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

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

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

3.1 __int__() 初始化方法

如下代码通过Python的赋值语句定义了类中的4个属性。 属性可以通过在类中定义__init__()函数来实现,__init__() 函数是Python类的初始化函数,系统生成实例时,会首先找类有没有定义这个函数,如果定义了就会执行这个函数。

类中所有方法第1个参数比较特别,是self,指的就是实例本身。

如下代码中,并且把实例传递到self这个实例中,并且设置默认属性。

class bread:
    def __init__(self):
        self.cooked_level = 0
        self.cooked_string = 'Soft'
        self.condiments = []
        self.slices = 1

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

3.2 定义其它方法

下面我们定义“烤面包”类的方法,在Bread类的代码里继续创建函数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准备烤面包,  接着顶格写如下的代码:

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

运行的结果如下:

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

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

然后再试试cook“烤”方法有没有效果,继续填加如下的语句:

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

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

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

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小牛叔208

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值