Day28.如何隐藏属性
1.如何隐藏属性_隐藏属性的使用方法
2.如何隐藏属性_隐藏属性的需要注意的问题
''' 二:将封装的属性进行隐藏操作 ''' # 1.如何隐藏:在属性名前加__前缀,就会实现对外隐藏属性效果 # 该隐藏需要注意的问题: # Ⅰ:在类外部无法直接访问双下滑线开头的属性,但知道了类名和属性名可以拼出来:_类名__属性,然后 # 就可以访问了,如:Foo._A__N,所以说这种操作并没有严格意义上地限制外部访问,仅仅只是一种语法 # 意义上的形式。 class Foo: __x = 1 # 属性伪装成_Foo__x def __f1(self): # 属性伪装成_Foo__f1 print('from test') print(Foo.__dict__) print('') # Ⅱ:这种隐藏对外不对内,外部用__x访问不到,内部使用__x可以访问到 # 因为__开头的属性会在检查类内代码语法时统一发生变形 class Foo: __x = 1 # 属性变形成_Foo__x def __f1(self): # 属性变形成_Foo__f1 print('from test') def f2(self): print(self.__x) # 实际打印:print(self._Foo__x) print(self.__f1) # 实际打印:print(self._Foo__f1) obj = Foo() obj.f2() print('') # print(Foo.__dict__) # Foo.x # Foo.f1 # III:变成成_Foo__x这种变形操作只在检查类体语法的时候发生于一次,之后定义的__开头的属性都不会变形 class Foo: __x = 1 # 属性变形成_Foo__x def __f1(self): # 属性变形成_Foo__f1 print('from test') def f2(self): print(self.__x) # 实际打印:print(self._Foo__x) print(self.__f1) # 实际打印:print(self._Foo__f1) # 新定义一个类体代码 Foo.__y = 3 print(Foo.__dict__) print(Foo.__y)
3.如何隐藏属性_对象中使用__开头的隐藏属性
print('隐藏对象属性'.center(50, '-')) class Foo: __x = 1 def __init__(self, name, age): self.__name = name self.__age = age obj = Foo('egon', 18) print(obj.__dict__) print(obj.name, obj.age) print('') # 2.为何要隐藏 print('为何要隐藏'.center(50,'-'))