zoukankan      html  css  js  c++  java
  • 组合

    1.组合作用:

    #减少代码的冗余

    1️⃣继承描述的是类与类之间,什么是什么的关系

    2️⃣组合:描述的是类和类之间的关系,是一种什么有什么的关系

    一个类产生的对象,该对象拥有一个属性,

    2.封装

    1.什么是封装

         装把一堆属性存起来,封的概念就是把这些属性隐藏起来

         强调封装单从字面意思看就是隐藏,但其实封装绝对不是单纯意义的隐藏

    2.为什么要用封装

        

    3.如何用封装

    #如何把属性隐藏起来,就是属性前面加上__开头(注意不要结尾)

    注意:

    1️⃣其实这种隐藏就是语法的变形,为一个属性名加一个__开头,会在类定义阶段(只检测函数内部的语法)将属性名变形:_自己的类名__属性名

    class Foo:

         __x=1111    #_Foo__x=1111

         def __init__(self,y):

               self.__y=y   #self._Foo__y=y

         def __f1(self):

         print('Foo.f1')

         def get_y(self):

              print(self._y)   #print(self._Foo__y)

    obj=Foo()

    #2.这种语法意义上的变形,只在定义类的阶段发生一次,类定义之后,新增的__开头的属性

    3.如果父类不想让子类覆盖自己的方法,可以在方法名前加__开头

    4.封装目的:

    1️⃣封装属性的目的:把数据属性封装起来,然后需要开辟接口给类的外部使用者使用,好处是

       我们可以在接口之上调价控制逻辑,从而严格空间访问者对属性的操作

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

    def tell_info(self):
    # u=input('user>>: ').strip()
    # p=input('pwd>>: ').strip()
    # if u == 'egon' and p == '123':
    print(self.__name,self.__age)

    def set_info(self,name,age):
    if type(name) is not str:
    raise TypeError('用户名必须为str类型')
    if type(age) is not int:
    raise TypeError('年龄必须为int类型')
    self.__name=name
    self.__age=age

    p=People('wss',18)

    p.tell_info() #wss 18

    p.set_info('WSS',19)
    p.tell_info() #WSS 19

    p.set_info(353535353535353535,20)#报错定义str类型的名字不可以是int类型
    p.set_info('EGON','20') #定义int后的年龄不可以是字符串


    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()
    obj=ATM()#调用类
    obj.withdraw()
    调用类里面的函数结果为:

    插卡
    用户认证
    输入取款金额
    打印账单
    取款

  • 相关阅读:
    dell r720服务器raid5安装centos6.5系统
    centos6.5报错:checking filesystems failed问题处理
    配置mysql5.5主从复制、半同步复制、主主复制
    vmware下centos克隆功能对网络的设置
    mysql报错问题解决MySQL server PID file could not be found!
    使用第三方工具Xtrabackup进行MySQL备份
    mysql数据库基于LVM快照的备份
    mysql的日志及利用mysqldump备份及还原
    centos6.5下java和tomcat环境部署
    通达OA数据库优化方案之_历史数据清理
  • 原文地址:https://www.cnblogs.com/shengg/p/8820067.html
Copyright © 2011-2022 走看看