python 封装调用_菜鸟世界 -python进阶---封装

1、封装

又是一个新的技术名词,却不是什么具体的技术,而是一种思想 ,一种理念。生活中,可以举出很多有封装理念的例子,比如邮寄一封信,你要把信放在信封里,贴上邮票,写上邮编和地址,这就是封装。再比如,你出去旅行,要把所用到的东西分门别类摆放整齐的装进旅行箱里,这也是封装。想想自己接收快递,快递小哥给你的只是一个纸箱或者一个塑料袋,这也是封装。封装以后,所有的东西是一个整体,这是封装的关键所在,也是目的所在。

2、输出学生的平均分

下面,我定义一个学生类

#coding=utf-8

class Stu(object):

def __init__(self,name,yuwen,shuxue):

self.name = name

self.yuwen = yuwen

self.shuxue = shuxue

stu_xiaoming = Stu(u'小明',90,98)

接下来,请你输出小明的平均分

2.1 请看第一种方法

# 输出小明的平均分

print u'{name}的平均分是{avg}'.format(name=stu_xiaoming.name,avg=(stu_xiaoming.shuxue+stu_xiaoming.yuwen)/2)

上面这个方法是可行的,输出了小明的平均分,但是有缺陷,如果一共有10处地方要输出小明的平均分,那么这样的代码就要写10次,假设输出内容有变化,比如变化成“小明本学年的平均分是94分”,那么,你就不得不修改10处代码,这样太浪费时间了,单单是找到这10处代码就很费力了

2.2 请看第二种方法

def avg(stu):

print u'{name}的平均分是{avg}'.format(name=stu.name,avg=(stu.shuxue+stu.yuwen)/2)

avg(stu_xiaoming)

第二种方法,完美的解决了第一种方法的问题,有10处要输出平均分,那么就在这些地方调用这个函数就好了,如果要修改输出内容,则只需要函数avg即可,只在一个地方改动,就变得简单多了。

第二种方法看似完美,但仍然有缺陷。这10处要输出平均分的地方,都要import这个函数,太麻烦,这是其一,其二,这种方法没有解决一个根本性的问题,学生的信息和学生的行为不是一个整体,学生的信息放在了对象里,而学生的行为,这里专指输出平均分,放在了对象之外(avg函数),他们不是一个整体,为什么要强调是一个整体呢,你想想我刚才举的例子,为什么信封外面写邮编和地址,里面装信呢?可不可以分开呢,信封上写邮编和地址,再用另一个器物装信呢?你觉得这简直是傻瓜式的想法,可回到刚才这个Stu类上,数据和行为分开,就合理么?

2.3 第三种方法

#coding=utf-8

class Stu(object):

def __init__(self,name,yuwen,shuxue):

self.name = name

self.yuwen = yuwen

self.shuxue = shuxue

def avg(self):

print u'{name}的平均分是{avg}'.format(name=self.name,avg=(self.shuxue+self.yuwen)/2)

stu_xiaoming = Stu(u'小明',90,98)

stu_xiaoming.avg()

将数据和行为封装在一起,数据就是指name,yuwen,shuxue这些数据,行为是指avg方法,数据加上行为,就形成了类,这就是封装。

封装以后,他们是一个整体了,对外,他们行动一致,口令统一,不是分散在各处的游泳散兵,而且,这样封装以后,我们对于程序的理解也变的容易了,和学生相关的事情,你就去找Stu类,目标非常明确,要增加什么,要修改什么,都在这里进行,由于封装产生了一个整体的事物,那么它和外接就是隔离的,你们家的的墙如果开了一个洞可以进到别人家,你能愿意么,每户人家都是隔离的,类就起到了这个隔离的效用。

封装,继承,多态,面向对象的三大利器。对于他们的理解,要结合实际的代码和应用,慢慢来体会。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值