小小的Python编程故事

640?wx_fmt=png


这一天,小小的爷爷来到蛋糕店,他在厨房捣鼓了一阵,做出来一款小小从来没见过的奇怪 蛋糕。首先,这个蛋糕是三角形的,看起来表面没有使用奶油,但是却有五种颜色。奇怪的是, 爷爷说这个蛋糕要用吸管来吃。

 

 蛋糕模板:类的定义 


小小问爷爷:“这个奇怪的蛋糕叫什么名字呢?”爷爷说:“还没想好呢!反正是蛋糕的一种。” 聪明的小小觉得该这么描述这个没有名字的蛋糕:1.  不管怎么样,它是一个物体。2.  它具有一些特征(或者属性),比如,三角形、没奶油、五种颜色。3.  可以对它采取一些动作,或者执行一些“方法”,比如,可以吃它,还可以用吸管“喝” 它,当然还可以出售它。 

这个蛋糕虽然奇怪,但是销售却异常火爆,供不应求。小小拿出“蛋糕制造机”来帮忙,但 是“蛋糕制造机”只能按照蛋糕的模板来生产蛋糕。于是,小小先为这款奇怪的蛋糕创建一个模 板。打开 Python IDLE Shell,新建一个文件,保存到 C:WorkspaceChapter19Xcake.py,输入代 码如下:

 
 
#创建类 class Xcake:     	
name="古怪蛋糕"     	
colorNumber=5     	
color=['红','黄','蓝','绿','黑']     	
shape='三角形'     	
creamContent=0 	
     def eat(self): 	
             return '吃我啊!吃我啊!' 	
     def drink(self): 	
             return '喝我啊!喝我啊!' 	
     def sell(self): 	
             return '买我啊!买我啊!' 

这段代码创建了一个生产这种古怪蛋糕的模板,模板名称叫作 Xcake,在模板内部指明了这种蛋糕的名字、颜色、形状和奶油含量,还指明了使用这种蛋糕的三个方法:eat、drink 和sell。在 Python 中称这种模板为“类”,并使用关键字 class 来创建类。类中包含两部分内容:

  • 一系列的变量及其初始值,称这些变量为这类对象的“属性”。

  • 一系列函数的定义,称这些函数为这类对象的“方法”。 

 创建类以后,凡是根据这个类创造的东西,统统称为类的“实例”,也称为类的“对象”。Python 支持类和对象的所有概念和技术,是一种面向对象的语言。面向对象的编程,被亲切地称为 OOP, 其是英文“Object Oriented Programming”的缩写。不仅 Python,许多程序设计语言都使用 OOP 技术。表 19.1 中列出了 OOP 的一些基本概念。 

640?wx_fmt=png

这里暂不深入讲解这些概念,后面会有详细说明。可以在一个文件中定义多个类。在使用文 件中定义的类之前,需要使用 from…import…来引入类。 


 制造蛋糕:创建对象 


创建好了 Xcake 类后,就可以开动蛋糕制造机来快速生产这种奇怪的蛋糕了。运行 Xcake.py 程序,打开 Python IDLE Shell。这时虽然看起来好像什么也没有发生,但实际上已经在内存中加 载了 Xcake 类。接下来输入以下代码就可以创建一个 Xcake 的对象: 

 
 
>>> cake1=Xcake()

 这样一行代码,就创建了一个 cake1 对象,它具有 Xcake 类所定义的所有属性和方法。在 Python 中,可以使用对象名加点号(.)来引用对象的属性和方法。下面新建一个文件 19.1cakeObj.py, 以演示如何创建和使用对象。代码如下: 

 
 
#对象示例 	
from Xcake import Xcake  #引入类 	
cake1=Xcake()  #实例化	
print("这个蛋糕有:",cake1.colorNumber,"种颜色")  #使用对象的属性 	
print("蛋糕的颜色有:",cake1.color) 	
print("吃蛋糕时,它会说:",cake1.eat())   #使用对象的方法 	
print("出售时,它会说:",cake1.sell()) 

这段程序首先创建一个 Xcake 的实 例—cake1 对象。然后使用几个 print() 函数进行输出,在 print()的参数中调用了 对象的属性和方法。


如何制造蛋糕?构造方法 


蛋糕制造机是如何制造出一个蛋糕的呢?这解释起来有点复杂,不过小小觉得它的工作原 理有点像在类里面定义的一种特殊方法—构造方法。每当需要创建对象时,就会调用类的构造 方法,这时,在构造方法里创建的那些函数就会被执行。这些函数就会创建对象的属性。到底构造函数长什么样呢?还是通过小小的 Xcake 类来看一看吧。打开 Xcake.py 文件,在 文件末尾添加一个新的类,代码如下: 

 
 
#创建类 class XcakePlus:     	
#定义类变量,也称属性     name="古怪蛋糕加强版"     	
price=1 #单价          	
#定义构造方法     	
def __init__(self,size,qty):         	
self.size=size         	
self.qty=qty          	
#定义其他方法    	
def eat(self):         	
print('吃我啊!吃我啊!')     	
def sumPrice(self):  #计算总价         	
print("一共:",self.qty*self.price,"元")            	
def preview(self):         	
print("您要的蛋糕是:",self.name,",尺寸:",self.size,"号",self.qty,"个。") 

XcakePlus 类定义了 3 个属性和 4 个方法,其中名为__init__的方法,一看其名字就比较特殊,它的名字以两个连续的下画线开始和结束,而且中间必须是 init,这就是类的构造方法。本例中的这个构造方法有 3 个参数:

  • self—用于获取类的实例。它是必需的,且必须为第一个参数,名称随意,但习惯上使 用 self。

  • size—用于获取传入的整数,表示蛋糕的尺寸。

  • qty—用于获取传入的整数,表示购买的个数。 

函数体有两行代码,分别将传入的参数size和qty赋给类对象的属性。使用self.size和self.qty 表示对象的属性。在Python中,每个类只能有一个构造方法。如果类中没有自定义的构造方法,如前面的Xcake 类,Python 会使用默认的构造方法。默认构造方法是只有一个 self 参数的方法。值得注意的是,在定义类时,如果要在方法中使用对象的属性,则需要使用 self.size、self.qty、self.price 这样的形式。定义好 XcakePlus 类以后,就可以创建它的对象了。新建一个文件 19.2cakeObj.py,输入以 下代码: 

 
 
#对象示例2 from Xcake import XcakePlus      #引入类 	
 	
#创建对象 cake1=XcakePlus(12,2)     #实例化 	
 	
#直接使用类变量 	
print("品种:",XcakePlus.name) 	
print("单价:",XcakePlus.price) 	
 	
#展示对象的方法 	
cake1.preview() 	
cake1.sumPrice()

这段程序首先引入XcakePlus 类,然后依照构造方法创建对象cake1,传入两个参数12 和2。这时 cake1 对象的两个属性 size 和 pty 就分别获得了值 12 和 2。接下来展示了类变量的使用,直 接使用“类名.类变量名”的形式。然后展示了对象方法的使用,使用“对象名.方法名”的形式 来调用。

面向对象编程的好处是可以使用类来快速创建多个对象。例如,可以在 IDLE Shell 的提示 符后面继续创建多个古怪蛋糕加强版的实例: 

 
 
>>> cake1=XcakePlus(8,1) 	
>>> cake2=XcakePlus(10,2) 	
>>> cake3=XcakePlus(12,1) 	
>>> cake1.preview() 	
您要的蛋糕是: 古怪蛋糕加强版 ,尺寸:8 号 1 个。	
>>> cake2.preview() 	
您要的蛋糕是: 古怪蛋糕加强版 ,尺寸:10 号 2 个。	
>>> cake3.preview() 	
您要的蛋糕是: 古怪蛋糕加强版 ,尺寸:12 号 1 个。

是不是很简单!一眨眼,小小已经生产了大量的“古怪蛋糕加强版” ! 

以上内容来自《小小的Python编程故事》



本书适合没有任何编程基础的人学习使用,尤其适合孩子、文科生等非计算机专业的人员使用。


640?wx_fmt=png

《小小的Python编程故事》

作者:毛雪涛  


640?wx_fmt=png

扫码购买

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值