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刚开始准备烤面包, 在同一个文件里,我们接着顶格写如下的代码:
joeBread = Bread()
print("烤时间",joeBread.cooked_level)
print("切片数",joeBread.slices)
print("口感",joeBread.cooked_string)
print("配料",joeBread.condiments)
运行的结果如下:
烤时间 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趣味入门12:初遇类与实例的更多相关文章
- Python趣味入门01:你真的了解Python么?
小牛叔倾情出品,史上更简单有趣的Python入门系列教程,用认真.上心的原创带你飞. 0.Why Python ? 什么入门用python,其实这和它的气质有关,根据CHM(计算机历史博物馆)网站介绍 ...
- python进阶01 面向对象、类、实例、属性封装、实例方法
python进阶01 面向对象.类.实例.属性封装.实例方法 一.面向对象 1.什么是对象 #一切皆对象,可以简单地将“对象”理解为“某个东西” #“对象”之所以称之为对象,是因为它具有属于它自己的“ ...
- Python趣味入门02: 妥妥地安装配置Python(Windows版)
< 上一篇:Python趣味入门01:你真的了解Python么? 本篇内容手把手教您如何去网上下载安装Python的运行环境,本文写于2020年Python稳定的版本是3.8,Windows流行 ...
- Python趣味入门5:循环语句while
跟着小牛叔,找准正确编程入门姿势,每天只要阅读10分钟. 任何语言都有循环语句,在Python里循环更是变化无穷,有基本的循环,有循环else语句,引伸出来的还有迭代器.推导式,咱们先学习最简单的一种 ...
- python基础教程:定义类创建实例
类的定义 在Python中,类通过class关键字定义,类名以大写字母开头 >>>class Person(object): #所有的类都是从object类继承 pass #pass ...
- Python学习 Day 7 面向对象 类和实例 访问限制
面向对象编程 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向过程的程 ...
- Python 学习入门(28)—— 服务器实例
在新的Python 3.x中,BaseHTTPServer, SimpleHTTPServer, CGIHTTPServer整合到http.server包,SocketServer改名为sockets ...
- python 字符串 - python基础入门(12)
在 python变量 文章中我们对python变量做了一个简单的了解,整数/浮点数/bool值相对来讲都比较简单,今天详细在讲解一下关于字符串的内容,字符串俗称:str. 在本文会大量的使用print ...
- python中类的输出或类的实例输出为何是<__main__类名 object at xxxx>这种形式?
原因: __str__()这个特殊方法将对象转换为字符串的结果 效果图: 代码: # 定义一个Person类 class Person(object): """人类&qu ...
- Python趣味入门3:变量、字串输入与输出
安装配置python环境完毕,非常有必要花十分钟对一些基本概念:变量.数学字符.输入.输出等4个概念进行理解,下面通过简单示例,深入了解python的基本语法. 本文的示例均在IDLE的命令行模式中完 ...
随机推荐
- Seata AT和XA模式
一.分布式事务产生得原因: 1.1.数据库分库分表 当数据库单表一年产生的数据超过1000W,那么就要考虑分库分表,具体分库分表的原理在此不做解释,以后有空详细说,简单的说就是原来的一个数据库变成了多 ...
- DEDEBIZ禁止发布重复标题文章的方法
修改文件位置 /admin/article_add.php 找到 if (empty($click)) $click = ($cfg_arc_click == '-1' ? mt_rand(1000, ...
- ProcessingJS
ProcessingJS 图形 rect(x, y, w, h)(在新窗口中打开) ellipse(x, y, w, h) triangle(x1, y1, x2, y2, x3, y3) line( ...
- 文心一言 VS 讯飞星火 VS chatgpt (116)-- 算法导论10.3 1题
一.用go语言,画图表示序列(13,4,8,19,5,11),其存储形式为多数组表示的双向链表.同样画出单数组表示的形式. 文心一言: 在Go语言中,我们无法直接画图,但我可以帮助你描述如何使用Go语 ...
- kubernetes 概述
云原生的发展 云原生是一条最佳路径或者最佳实践.更详细的说,云原生为用户指定了一条低心智负担的.敏捷的.能够以可扩展.可复制的方式最大化地利用云的能力.发挥云的价值的最佳路径.因此,云原生其实是一套指 ...
- 用Rust手把手编写一个Proxy(代理), 准备篇, 动手造轮子
用Rust手把手编写一个Proxy(代理), 准备篇, 动手造轮子 wmproxy 将实现http/https代理, socks5代理, 后续将实现websocket代理, 内外网穿透等, 会将实现过 ...
- CSS色域、色彩空间、CSS Color 4新标准
引言 近期,三大主流浏览器引擎均发布最新版本,支持W3C的CSS Color 4标准,包含新的取色方法color()和相应语法,可展示更多的色域及色彩空间,这意味着web端能展示更丰富更高清的色彩.虽 ...
- vue3 移动端添加暗门 vconsole调试和显示隐藏
一.说明 需求: 生产环境出bug,是app单点登录,没法调试,需要加一个vconsole,但是不影响其他用户使用,于是想到用暗门的方式 实现: 最终实现如上图,点击个人中心几个字,点击10次显示vc ...
- 阿里发布AI编码助手:通义灵码,兼容 VS Code、IDEA等主流编程工具
今天是阿里云栖大会的第一天,相信场外的瓜,大家都吃过了.这里就不说了,有兴趣可以看看这里:云栖大会变成相亲现场,最新招婿鄙视链来了... . 这里主要说说阿里还发布了一款AI编码助手,对于我们开发者来 ...
- svn 分支的创建及合并
http://blog.csdn.net/jixiuffff/article/details/5586858 http://zhidao.baidu.com/link?url=uiRk-4ZBkLPx ...