柳小白Python学习笔记27类的学习4

北京中科白癜风康复明星 https://baike.baidu.com/item/%E5%88%98%E4%BA%91%E6%B6%9B/21900249?fr=aladdin

这两天学习了怎么在python中定义一个类,并用它实例化一个对象。还学习了对类和对象成员检测和操作。今天继续学习类的封装。

我们从这几天的学习中知道可以在外部对类(对象)成员进行访问和操作。那么什么是类(对象)的内部和外部呢?

这里我们用最开始定义的MyFruit类和它实例化的对象my_apple来说明。

27-1

从图27-1中可以看出,。声明MyFruit类的时候,声明了成员属性和成员方法,它们组成了类的内部也叫类主体;而对象的内部就是我们实例化对象的操作。而我们通过类名(对象名).成员属性(方法)来访问及实例化对象时就是在类(对象的)外部访问和操作。

如果我们不想让类和对象的成员被外部访问和操作要怎么做呢?

在python中有一种特性:封装。封装分为公共的封装,受保护的封装和私有化封装。我们前面学习的就是公共的封装,可以随便访问和操作类和的成员。想解决我们上面提到的问题,就要用到私有化封装。方法也比较简单,只需要在类(对象)成员前加双下划线(英文状态下的双划线,看起来像一条直线)。

27-2

在图27-2中,把f_name属性和my_eat方法,用双下划线私有化。在MyFruit类的主体内的my_decorate方法中,调用了__f_name私有属性和__my_eat私有方法。

但是当我们在类外部调用f_name和my_eat时程序会报错:“类型对象MyFruit没有属性×××”。所以私有化的成员不能被外部访问和操作。

当然,我们在my_apple.my_decorate方法中调用了私有化的属性和方法,而私有化的成员通过my_apple.my_decorate被外部成员访问和操作。所以私有化的成员可以通过调用方法被外部访问和操作。

self

在图27-2中我们看到,调用私有化成员方法用到了self.成员方法,而定义类的方法的时候方法名后的小括号里也有self,这个self是什么意思?又有什么作用呢?

self在这里相当于一个代词,相当于我们平时称呼的你、我、它。代指某个特定的实例。

在定义类中的方法:方法名(self),这里的self是必须参数,后期我们通过调用self.成员方法在类主体里调用私有方法。




转载请注明:http://www.aierlanlan.com/grrz/2897.html