zoukankan      html  css  js  c++  java
  • 面向对象三大特征之封装

    面向对象三大特征之封装

    一:组合

      组合:组合指的是某一个对象拥有一个属性,该属性的值是另外一个类的对象(多个对象放在一起叫组合)
      好处:通过为某一个对象添加属性(属性的值是另外一个类的对象)的方式,可以间接地将两个类关联/整合/组合到一起。

        可以降低代码冗余,降低耦合度,也就是在程序中一个对象将另一个对象作为自己的属性。

    class Person:
        def __init__(self,name,sex,age):
            self.name=name
            self.sex=sex
            self.age=age
    class Student(Person):
        def __init__(self,name,sex,age,number):
            super().__init__(name,sex,age,)
            self.number=number
        def show_info(self):
            print(self.__dict__)
        def select_course(self):
            print('%s正在逃课。。。'%self.name)
    class Phone:
        def __init__(self,phone_number,operator,address):
            self.operator = operator
            self.address = address
            self.phone_number=phone_number
        def call(self):
            print('%s正在拨号中'%self.phone_number)
    
    stu=Student('小仙女','','18','001')
    p1=Phone('88888888888','中国移不动','上海浦东')
    stu.phone=p1
    stu.phone.call()
    组合例子

    二:封装

      封装:在类的定义的属性前加__开头(没有__结尾)
      总结:
          1. __开头的属性实现的隐藏仅仅只是一种语法意义上的变形,并不会真的限制类外部的访问
          2. 该变形操作只在类定义阶段检测语法时发生一次,类定义阶段之后新增的__开头的属性并不会变形
          3. 如果父类不想让子类覆盖自己的属性,可以在属性前加__开头

    通俗版本:

      封装:在程序中指的是将内容隐藏起来,在面向对象中属性和方法可以被隐藏。

      为什么要封装?

        提高安全性(cpu频率,缓冲区大小)

        对于封装属性而言,是通过给访问和修改增加额外d逻辑判断来实现的

      注意:封装不是简单的隐藏。封装是指:隐藏内部实现细节,对外提供访问接口。封装是为了明确区分内部和外部。

      如何使用封装?

        在属性或者方法之前加上两个下划线__就可以将其设置为私有的。python权限只有两种:公开(谁都可以访问的)和私有的(至于哦自己能访问的)。属性的封装通常需要提供相应的设置器和访问器。

        特点:被隐藏的内容在内部是可以访问的,外部无法访问。对于被隐藏的属性,访问和修改都需要通过方法。

    class Student:
        def __init__(self,name,age,idCard):
            self.name=name
            self.age=age
            self.__idCard=idCard
    
        def say_hi(self):
            print('Hello,I am %s,my age is %s'%(self.name,self.age))
    
        def test(self):
            print(self.__idCard)
    
        # def get_card(self):    #过渡
        #     return self.__idCard
    
        def get_card2(self,pwd):
            if pwd=='123':
                return self.__idCard
            else:
                print('抱歉,您没有权限!')
    
    stu=Student('张艺兴','18','320830199901223222')
    # stu.test()
    
    idCard=stu.get_card2('111')
    print(idCard)
    封装例子

      

  • 相关阅读:
    手机浏览器的viewport(视觉窗口)
    google开源了google chrome android
    Yii 直接执行SQL语句(转)
    WebKit学习网址收集
    Yii CDbCriteria的常用方法
    现货黄金入门知识普及一:图形分析之K线理论
    java 获取当前函数名
    yii url生成
    android 判断屏幕是否关闭
    yii yiiplayground
  • 原文地址:https://www.cnblogs.com/liuxiaolu/p/10134031.html
Copyright © 2011-2022 走看看