「Python」面向对象封装案例1——小夏爱跑步、案例扩展

一、了解面向对象的封装

封装是面向对象编程的一大特性,当我们面向对象编程的时候第一步就是先做需求分析然后根据明确的职责将不同的属性和方法封装到一个又一个抽象的类中。之所以说是抽象的类,因为在开发程序中类是不能直接使用的,当定义好一个类之后,在外界也就是类的代码外部来使用类创建对象,然后再让这个对象去调用我们封装在类中的各个方法。

强调一点:对象方法的细节都是被封装在类的内部的,在外界只需要使用类创建对象,然后让对象调用方法。

总结:

  1. 封装是面向对象编程的一大特点
  2. 面向对象编程的第一步:将属性和方法分装到一个抽象的类中
  3. 外界使用类创建对象,然后让对象调用方法
  4. 对象方法的细节都被封装在累的内部

二、封装案例——小夏爱跑步

2.1 需求分析

需求:

  1. ****小夏体重****55.5公斤
  2. 小夏每次****跑步****会减体重0.5公斤
  3. 小夏每次****吃东西****体重会增加1公斤
1662101164638.png

当看到需求后,应该用名词提炼法把需求中的名词提炼出。在需求中可以看出有个叫小夏的人类,那么可以定义一个叫做Person的类,在这类中然后看出这个人类的其他属性特征,比如名字和体重分别用name和weight来记录。以上是需求中的名词属性接下来看需求中的动词,不难看出跑步和吃东西是动词,那么在类中定义两个方法,一个run(self)一个eat(self)。再看需求,跑步和吃饭都会影响到体重这个属性,每次跑步会减体重0.5公斤,每次吃东西体重会增加1公斤。

这个案例主要复习之前的init初始化方法,利用这个初始化方法来简化对象的创建,同时复习一下str这个内置方法,通过这个方法来简化一下小夏对象的输出。

2.2 代码

下图是完成了一大半的代码,剩下两个方法没有完成,目前用pass占位符代替,只是先看看代码总体有没有出错,是否可以正常运行,结果显示时没问题的。接下来在写类中具体的两个方法。

图片1.png

完整代码:

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)
image.gif

运行结果:

图片2.png

代码总结:

图片3.png

上图中折叠了Person类,在类的外部创建了叫小夏的对象,在对象中传入参数名字和体重,然后对象去调用在类中的两个方法,最后输出这个对象。

提示:在对象的方法内部是可以直接访问对象的属性的。

如下图:在案例中不仅输出了小夏的名字还同时修改了小夏的体重

图片4.png

三、案例扩展——多个对象之间属性互不干扰

小夏爱跑步扩展之小菜也爱跑步。

需求:

  1. 小夏爱跑步,小菜也爱跑步
  2. 小夏体重55.5公斤
  3. 小菜体重60公斤
  4. 每次跑步都会减少0.5公斤
  5. 每次吃东西都会增加1公斤
1662101164638.png

3.1需求分析

****分析:****

分别有小夏和小菜两个人物,可以看做是两个对象,他们各自都有各自的体重。同样可以使用一个Person类,在这个类中定义两个属性,一个name,一个 weight。体重每次跑步和吃东西都会变化,这2个方法的描述是完全一样的意味着在类中分装的2个代码具体的代码实现也是完全相同的,只是在这两个方法执行过程中各自修改不同对象的体重属性。代码是一样的,但是修改的属性是根据调用的对象不同而不同。

3.2代码

只是在上面的代码中创建一个小菜对象,小菜对象再去调用跑步和吃东西的方法,左后输出小菜这个对象。

****提示:同一个类创建的多个对象之间,属性互不干扰。****

具体代码如下图:

图片5.png

结果分析:

运行完小菜对象的代码后可以看出并不会影响到小夏的体重变化,这个因为代码在运行的过程中,在28行先在内存中开辟一个空间来存储小夏对象的两个属性一个名字一个体重,再执行下面两个方法,最后输出小夏对象。然后运行到36行代码创建小菜对象,在内存中同样开辟另外一个空间分别存储name和weight,执行两个方法,最后输出小菜对象。在这一列过程中,两个对象之间的属性并没有被互相干扰到。

图片6.png

面向对象编程中使用同一个类可以创建出不同的对象,根据实际的场景每一个对象的属性会各自发生变化,但是多个对象之间属性彼此是互不干扰的。

以上就是关于面向对象案例的一个小小分析和代码演练,更多Python编程题可以关注Python自学网,不断更新。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容