面向对象编程之封装

一、一言简释:封装是面向对象三大特征的最核心的一个特征,封装的结果是隐藏属性。

二、封装数据

  1、在数据的变量名前面加上__,就会实现对外隐藏的效果,类外无法通过__变量名访问到该变量,但是可以通过_类名__变量名访问到,所以说封装并不是完全屏蔽了外界的访问,仅仅是语法上的变形。

class Aaa:
    __x = 1
print(Aaa.__x)  # 报错
print(Aaa._Aaa__x)  # 结果为 1

  2、封装变形会在类的定义阶段统一执行,所以类内部可以对封装数据进行访问。

class Aaa:
    __x = 1
    def look(self):
        print(self.__x)
obj_1 = Aaa()
obj_1.look()  # 结果为 1

  3、封装只能在定义类的时候使用,定义完的类,后续新增的数据无法被封装。

class Aaa:
    __x = 1
Aaa.__y = 2
print(Aaa.__y)  # 结果为 2

  4、在定义类时,可以封装对象的属性。

class Aaa:
    def __init__(self,name):
        self.__name = name
obj_1 = Aaa('tom')
# print(obj_1.__name)  # 报错
print(obj_1._Aaa__name)  # 结果为 tom

  5、封装的目的:是为了限制外界对数据的直接操作,可以在类体内增设接口来供外界间接操作,接口可以附加一系列逻辑来定制操作条件。

class Aaa:
    __x = 1
    def change(self,new_val):
        if type(new_val) is not int:
            print('必须改为数字')
            return
        Aaa.__x = new_val
obj_1 = Aaa()
obj_1.change('aaa')
print(Aaa._Aaa__x)  # 结果为 1
obj_1.change(123)
print(Aaa._Aaa__x)  # 结果为 123 

二、封装功能:能够隔离复杂度,将类内一系列功能封装为一个功能

class Func:
    def __step_1(self):
        pass
    def __step_2(self):
        pass
    def __step_3(self):
        pass
    def total_step(self):
        Func.__step_1(self)
        Func.__step_2(self)
        Func.__step_3(self)

猜你喜欢

转载自www.cnblogs.com/caoyu080202201/p/12662867.html