zoukankan      html  css  js  c++  java
  • 类的封装

    1.封装介绍

    总结一句话: 把抽象的属性和方法封装到类中,外部可以通过对象或类来调用对外暴露的方法或属性

    封装:将属性和方法,封装到对象中
    装:是往容器/名称空间里存放名字
    封:代表将存放于名称空间中的名字给藏起来,这种隐藏对外不对内
    为什么要封装:  封装数据属性,封装函数属性,
            1. __开头的属性实现的隐藏仅仅只是一种语法意义上的变形,并不会真的限制类外部的访问    在定义阶段已经变形为_类名__方法名
            2. 该变形操作只在类定义阶段检测语法时发生一次,类定义阶段之后新增的__开头的属性并不会变形
            3. 如果父类不想让子类覆盖自己的属性,可以在属性前加__开头
    class Foo:
        __x=111 # _Foo__x   可以通过 (类名/实例)._类名__属性名 的方式在外部访问 
        __y=222 # _Foo__y
    
        def __init__(self,name,age):
            self.__name=name
            self.__age=age
    
        def __func(self): #_Foo__func  
            print('func')
    
        def get_info(self):
            print(self.__name,self.__age,self.__x)
    print(Foo.__x)  报错 
    print(Foo._Foo__x) 111 类外部访问私有属性的方法

    2.如何实现私有属性,方法的对外不对内       外部不可以直接访问私有属性或方法,但是可以间接使用

    class Foo:
        def _f1(self):
            print('foo.. f1')
        def f2(self):
            print('foo.. f2')
            self._f1()   #    对外隐藏对内不隐藏  外部调用f1会间接访问f2

    3. 封装函数属性:隔离复杂度  内部方法无法确定顺序,直接隐藏不对外开放隔离复杂度   秒懂封装

    class ATM:
        def __card(self):
            print('插卡')
        def __auth(self):
            print('用户认证')
        def __input(self):
            print('输入取款金额')
        def __print_bill(self):
            print('打印账单')
        def __take_money(self):
            print('取款')
    
        def withdraw(self):
            self.__card()
            self.__auth()
            self.__input()
            self.__print_bill()
            self.__take_money()
    
    a=ATM()
    a.withdraw()
  • 相关阅读:
    Dart中的类型转换总结:
    【Dart学习】--Dart之数组(List)的相关方法总结
    Navigator的使用:
    001——Angular环境搭建、运行项目、搭建项目
    Dart中的数据类型转换:
    Flutter中的Stack、Align、Positioned的使用
    Flutter设置图片为正方形
    顶部导航TabBar、TabBarView、DefaultTabController
    《慕客网:IOS基础入门之Foundation框架初体验》学习笔记 <二> NSMutableString
    Swift随记
  • 原文地址:https://www.cnblogs.com/bigbox/p/11946579.html
Copyright © 2011-2022 走看看