zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    汉诺塔问题
    两个有序链表序列的合并
    数列求和
    求集合数据的均方差
    [NOIP2014] 提高组 洛谷P1328 生活大爆炸版石头剪刀布
    [NOIP2014] 普及组
    洛谷P1726 上白泽慧音
    洛谷P1808 单词分类
    洛谷P1889 士兵站队
    洛谷P1288 取数游戏II
  • 原文地址:https://www.cnblogs.com/pdun/p/11252554.html
Copyright © 2011-2022 走看看