zoukankan      html  css  js  c++  java
  • 五.封装

    '''
    1 什么是封装
    装就是将数据属性或者函数属性存放到一个名称空间里
    封指的是隐藏,该隐藏是为了明确地区分内外,即该隐藏是对外不对内(在类外部无法直接访问隐藏的属性,而在类内部是可以访问)


    2 为何要封装
    1. 封数据属性:???
    2. 封函数属性:???

    3 如何封装???
    在类内定义的属性前加__开头
    '''


    # class People:
    # __country='China' #_People__country='China'
    # __n=111 #_People__n=111
    #
    # def __init__(self,name):
    # self.__name=name #self._People__name=name
    #
    # def run(self):
    # print('%s is running' %self.__name) #self._People__name

    # print(People.__country)

    # obj=People('egon')
    # print(obj.__name)
    # print(obj.run)
    # obj.run()

    # print(People.__dict__)
    # print(People._People__country)
    # print(obj.__dict__)
    # print(obj._People__name)


    # 总结这种隐藏需要注意的问题:
    # 1. 这种隐藏只是一种语法上的变形,并没有真的限制访问
    # 2. 这种变形只在类定义阶段检测语法时变形一次,类定义阶段之后新增的__开头的属性不会发生变形
    # People.__x=1
    # obj.__y=2

    # print(People.__dict__)
    # print(obj.__dict__)

    # 3. 在继承中,父类如果不想让子类覆盖自己的方法,可以在该方法前加__开头
    # class Parent1:
    # def __func(self): #_Parent1__func
    # print('parent1.func')
    #
    #
    # class Sub1(Parent1):
    # def __func(self): #_Sub1__func
    # print('sub1.func')


    # class Foo:
    # def __f1(self): #_Foo__f1
    # print('Foo.f1')
    #
    # def f2(self):
    # print('Foo.f2')
    # self.__f1() #self._Foo__f1()
    #
    # class Bar(Foo):
    # def __f1(self): #_Bar__f1
    # print('Bar.f1')
    #
    #
    # obj=Bar()
    # obj.f2()


    # 封装的真实意图:把数据属性或函数属性装起来就是为了以后使用的,封起来即藏起来是为不让外部直接使用
    # 1.封数据属性:把数据属性藏起来,是为了不让外部直接操作隐藏的属性,而通过类内开辟的接口来间接地操作属性,
    # 我们可以在接口之上附加任意的控制逻辑来严格控制使用者对属性的操作

    '''
    class People:
    def __init__(self, name, age):
    self.__name = name
    self.__age = age

    def tell_info(self):
    print('<name:%s age:%s>' % (self.__name, self.__age))

    def set_info(self, name, age):
    if type(name) is not str:
    print('名字必须是str类型')
    return
    if type(age) is not int:
    print('年龄必须是int类型')
    return

    self.__name = name
    self.__age = age


    obj = People('egon', 18)

    # obj.tell_info()
    # obj.set_info('EGON',19)
    # obj.set_info(123,19)
    obj.set_info('EGOn','19')
    obj.tell_info()
    '''

    #2. 封函数属性: 隔离复杂度
    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()

  • 相关阅读:
    JAVA 基本数据类型长度
    字符编码详解
    几种编码方式
    Java1.5泛型指南中文版(Java1.5 Generic Tutorial)
    java泛型小问题
    java中的equals()方法
    Java泛型中E、T、K、V等的含义
    数据库的基本操作
    Mysql数据类型简介(大概了解)
    [BZOJ 2007] 海拔
  • 原文地址:https://www.cnblogs.com/yspass/p/9595576.html
Copyright © 2011-2022 走看看