共计 2053 个字符,预计需要花费 6 分钟才能阅读完成。
一、理解面向对象的封装
封装是面向对象编程的一大个性,当咱们面向对象编程的时候第一步就是先做需要剖析而后依据明确的职责将不同的属性和办法封装到一个又一个形象的类中。之所以说是形象的类,因为在开发程序中类是不能间接应用的,当定义好一个类之后,在外界也就是类的代码内部来应用类创建对象,而后再让这个对象去调用咱们封装在类中的各个办法。
强调一点: 对象办法的细节都是被封装在类的外部的,在外界只须要应用类创建对象,而后让对象调用办法。
总结:
- 封装是面向对象编程的一大特点
- 面向对象编程的第一步:将属性和办法分装到一个形象的类中
- 外界应用类创建对象,而后让对象调用办法
- 对象办法的细节都被封装在累的外部
二、封装案例——小夏爱跑步
2.1 需要剖析
需要:
- 小夏体重 55.5 公斤
- 小夏每次跑步会减体重 0.5 公斤
- 小夏每次吃货色体重会减少 1 公斤
当看到需要后,应该用名词提炼法把需要中的名词提炼出。在需要中能够看出有个叫小夏的人类,那么能够定义一个叫做 Person 的类,在这类中而后看出这个人类的其余属性特色,比方名字和体重别离用 name 和 weight 来记录。以上是需要中的名词属性接下来看需要中的动词,不难看出跑步和吃货色是动词,那么在类中定义两个办法,一个 run(self) 一个 eat(self)。再看需要,跑步和吃饭都会影响到体重这个属性,每次跑步会减体重 0.5 公斤,每次吃货色体重会减少 1 公斤。
这个案例次要温习之前的__init__初始化办法,利用这个初始化办法来简化对象的创立,同时温习一下__str__这个内置办法,通过这个办法来简化一下小夏对象的输入。
2.2 代码
下图是实现了一大半的代码,剩下两个办法没有实现,目前用 pass 占位符代替,只是先看看代码总体有没有出错,是否能够失常运行,结果显示时没问题的。接下来在写类中具体的两个办法。
残缺代码:
class Person:
# 初始化办法: 简化对象的创立
def __init__(self, name, weight):
# self. 属性 = 形参
self.name = name
self.weight = weight
# 内置办法__str__(self): 简化对象的输入
def __str__(self):
# 这个办法须要留神必须要返回一个字符串
# .2f 示意在遇到小数的时候只保留 2 位小数
return "我的名字叫 %s 体重是 %.2f 公斤" % (self.name, self.weight)
def run(self):
print("%s 爱跑步,跑步能够锻炼身体也能够减肥" % self.name)
# 每次跑步体重缩小 0.5 公斤
self.weight -= 0.5
def eat(self):
print("%s 爱吃,是个吃货" % self.name)
# 每次吃货色体重增加 1 公斤
self.weight += 1
# 创立小夏对象
xiaoxia = Person("小夏", 55.5)
xiaoxia.run()
xiaoxia.eat()
print(xiaoxia)
运行后果:
代码总结:
上图中折叠了 Person 类,在类的内部创立了叫小夏的对象,在对象中传入参数名字和体重,而后对象去调用在类中的两个办法,最初输入这个对象。
提醒:在对象的办法外部是能够间接拜访对象的属性的。
如下图:在案例中不仅输入了小夏的名字还同时批改了小夏的体重
三、案例扩大——多个对象之间属性互不烦扰
小夏爱跑步扩大之小菜也爱跑步。
需要:
- 小夏爱跑步,小菜也爱跑步
- 小夏体重 55.5 公斤
- 小菜体重 60 公斤
- 每次跑步都会缩小 0.5 公斤
-
每次吃货色都会减少 1 公斤
3.1 需要剖析
剖析:
别离有小夏和小菜两个人物,能够看做是两个对象,他们各自都有各自的体重。同样能够应用一个 Person 类,在这个类中定义两个属性,一个 name,一个 weight。体重每次跑步和吃货色都会变动,这 2 个办法的形容是齐全一样的意味着在类中分装的 2 个代码具体的代码实现也是完全相同的,只是在这两个办法执行过程中各自批改不同对象的体重属性。代码是一样的,然而批改的属性是依据调用的对象不同而不同。
3.2 代码
只是在下面的代码中创立一个小菜对象,小菜对象再去调用跑步和吃货色的办法,左后输入小菜这个对象。
提醒:同一个类创立的多个对象之间,属性互不烦扰。
具体代码如下图:
后果剖析:
运行完小菜对象的代码后能够看出并不会影响到小夏的体重变动,这个因为代码在运行的过程中,在 28 行先在内存中开拓一个空间来存储小夏对象的两个属性一个名字一个体重,再执行上面两个办法,最初输入小夏对象。而后运行到 36 行代码创立小菜对象,在内存中同样开拓另外一个空间别离存储 name 和 weight,执行两个办法,最初输入小菜对象。在这一列过程中,两个对象之间的属性并没有被相互烦扰到。
面向对象编程中应用同一个类能够创立出不同的对象,依据理论的场景每一个对象的属性会各自发生变化,然而多个对象之间属性彼此是互不烦扰的。
以上就是对于面向对象案例的一个小小剖析和代码演练,更多 Python 练习题能够关注 Python 自学网,不断更新。www.wakey.com.cn/