一、认识面向对象的封装封装是面向对象编程的一大特点。当我们面对对象编程时,第一步是先做需求分析,然后根据明确的职责,将不同的属性和方法依次封装到抽象类中。之所以称为抽象类,是因为在开发程序中不能直接使用该类。定义了一个类之后,使用类在类的代码之外创建一个对象,然后让这个对象在类中调用我们封装的方法。强调一点:对象方法的细节都封装在类内部,你只需要在外面用类创建对象,然后让对象调用方法即可。总结:封装是面向对象编程的一大特点。面向对象编程的第一步是将属性和方法包装到一个抽象类中。外界使用类创建对象,然后让对象调用方法。Tiredinterior封装了对象方法的细节2.封装案例——小霞爱跑2.1需求分析需求:小霞体重55.5公斤小霞每次跑步减0.5公斤小霞每次吃饭增重1公斤当看到需求时,它shouldberefinedwithnouns方法提取需求中的名词。从需求中可以看出,有一个人叫小霞,所以可以定义一个叫Person的类,在这个类中可以看到这个人的其他属性,比如name和weight分别按name和weight记录。以上是需求中的名词属性。接下来,看看要求中的动词。不难看出,跑和吃是动词。然后在类中定义两个方法,一个run(self)和一个eat(self)。再看需求,跑步和吃饭都会影响体重这个属性。每跑一次,体重减轻0.5公斤,每吃一次,体重增加1公斤。本案例主要回顾了前面的__init__初始化方法,并使用这种初始化方法来简化对象的创建。同时回顾内置方法__str__,利用该方法简化小霞对象的输出。2.2代码下图显示了一半以上的代码,剩下的两个方法都没有完成。目前,改用pass占位符。只看整体代码有没有错误,能不能正常运行。结果显示时没有问题。接下来,将两个具体的方法写在类中。完整代码:classPerson:#初始化方法:简化对象创建def__init__(self,name,weight):#self.attribute=形参self.name=nameself.weight=weight#内置方法__str__(self):简化对象的输出def__str__(self):#这个方法需要注意的是必须返回一个字符串#.2f表示遇到小数只保留2位小数return"Mynameis%sandmyweightis%.2fkg"%(self.name,self.weight)defrun(self):print("%s爱跑步,跑步可以锻炼减肥"%self.name)#每次跑步减重0.5公斤self.weight-=0.5defeat(self):print("%s爱吃,他是afoodie"%self.name)#每吃一次,体重增加1kgself.weight+=1#创建一个小霞对象xiaoxia=Person("小霞",55.5)xiaoxia.run()xiaoxia.eat()print(xiaoxia)运行结果:代码摘要:上图中折叠了Person类,在类外创建了一个对象叫xiaoxia,以及参数名和Weight,然后该对象调用类中的两个方法,最后输出这个对象。提示:在对象的方法内部,可以直接访问对象的属性。如下图所示:案例中,不仅输出了小霞的名字,同时还修改了小霞的体重。3.大小写扩展——多个对象的属性互不干扰。要求:小霞爱跑,小菜也爱跑是两个物体,各有各的重量。您还可以使用Person类并在此类中定义两个属性,一个名称和一个权重。每次跑步和吃东西时,体重都会发生变化。这两个方法的描述是完全一样的,也就是说封装在类中的两个代码的具体代码实现也是完全一样的,只是在这两个方法的执行过程中是不一样的。修改不同物体的重量属性。代码是一样的,只是修改的属性根据调用对象的不同而不同。3.2代码只是在上面的代码中创建了一个配菜对象,然后配菜对象调用running和eating的方法,然后输出配菜对象。提示:同一个类创建的多个对象之间,属性互不干扰。具体代码如下图所示:结果分析:运行小菜对象的代码后可以看出,不会影响小霞的体重变化。这是因为代码在运行过程中首先在内存中开辟了一块空间来存放小霞对象在第28行。对象的两个属性分别是名字和权重,然后执行下面两个方法,最后输出小霞对象。然后跑到36行代码创建一个配菜对象,在内存中开辟另外一个空间分别存放name和weight,执行两个方法,最后输出配菜对象。在此过程中,两个对象之间的属性互不干扰。在面向对象编程中,可以使用同一个类创建不同的对象。每个物体的属性会根据实际场景发生变化,但多个物体的属性互不干扰。以上就是一个关于面向对象案例的小分析和代码演练。更多Python习题,可以关注Python自学网,持续更新。www.wakey.com.cn/
