day27 封装

广义上的面向对象的封装: 
  代码的保护,面向对象思想本身就是一种封装
  只让自己的对象调用自己类的方法


狭义的封装:
  面向对象的三大特性之一,其他两个是继承和多态。
  属性和方法都可以藏起来不让你看到
 1 class Person :
 2     __key = 123                         # 私有静态属性
 3 
 4     def __init__(self,name,passwd):
 5         self.name = name
 6         self.__passwd = passwd            # 加__变成私有属性
 7 
 8     def get_pwd(self):
 9         print(self.__dict__)
10         return self.__passwd
11 
12     def __get_pwd1(self):                # 定义私有方法
13         print(self.__dict__)
14         return self.__passwd
15 
16     def login(self):
17         self.__get_pwd1()
18 
19 yangtuo = Person("yangtuo","tiancai")
20 # print(alex.__passwd)                       # 私有属性在外面是调不到的
21     # AttributeError: 'Person' object has no attribute '__passwd'
22 print(yangtuo.__dict__)                      # 私有属性仅仅是代码级别的一小层的加密
23 print(yangtuo._Person__passwd)                 # 通过一定的方法依然可以在外部调用私有属性,但是请不要用这种方式
24 print(yangtuo.get_pwd())                      # 通过类内的函数方法还是可以调用出来的
25 
26 
27 yangtuo.__higt = 1                            # 在类的外部这样创建是没用的,是无法成为私有属性的,哪怕你加了下划线
28 print(yangtuo.get_pwd())
29 print(yangtuo.__higt)                         # 因此可以在外部调用,毕竟不是私有属性嘛


私有属性或者方法都是左边加双下划线,而且只能在内部使用,不能在外部使用
可以定义私有的有
对象的私有属性
类中的静态属性
类中的方法
虽然你知道可以用什么方法在外部使用,但是别做就行了

顺便在其他语言里面 分为 public protect private
python 只有 public 和 private,用没有下划线和前面加双下划线表示区分,不需要关键字

会用到私有概念的场景
隐藏属性不被外部调用
保护属性不被随便改
保护属性不被子类继承


猜你喜欢

转载自www.cnblogs.com/shijieli/p/9922423.html