OOP三大特性之封装

封装简介

#什么是封装

    对外部隐藏实现细节,并且提供简单的接口

#封装的目的

   1、提高安全性(封装数据)
   2、隔离复杂度(封装方法)

#如何封装
   使用特殊语法,给要隐藏的变量前加双下划线(__)

 

隐藏数据

#其实这仅仅这是一种变形操作且仅仅只在类定义阶段发生变形
#类中所有双下划线开头的名称如__x都会在类定义时自动变形成:_类名__x的形式:

class A:
    __N=0 #类的数据属性就应该是共享的,但是语法上是可以把类的数据属性设置成私有的如__N,会变形为_A__N
    def __init__(self):
        self.__X=10 #变形为self._A__X
    def __foo(self): #变形为_A__foo
        print('from A')
    def bar(self):
        self.__foo() #只有在类内部才可以通过__foo的形式访问到.

#A._A__N是可以访问到的,
#这种,在外部是无法通过__x这个名字访问到。

 

property装饰器

#为什么要用property
对象再去使用的时候obj.name,根本无法察觉自己的name是执行了一个函数然后计算出来的,
为了统一私有属性和普通属性的访问方式,使用property将类内的函数属性伪装成数据属性 

 

class People:
    def __init__(self,name,weight,height):
        self.name=name
        self.weight=weight
        self.height=height
    # @property
    def bmi(self):
        return self.weight / (self.height**2)

p1=People('egon',75,1.85)
print(p1.bmi())            此时需要p1.bmi()调用


如果用@property,可以直接p1.bmi调用
View Code

 

posted @ 2019-07-26 20:04  pdun  阅读(765)  评论(0编辑  收藏  举报