zoukankan      html  css  js  c++  java
  • 封装

    封装

    “封装”就是将抽象得到的数据和行为相结合,形成一个有机整体

    • 元组,列表,字典等等:数据的封装,通过引用去使用数据
    • 函数:算法的封装
      • 如果没有函数,功能要靠每一行代码去直接执行
      • 没有函数的话,耦合度会很高,复用性很差,开发效率也非常低

    封装的目的是简化编程和增加安全性

    • 使用者不必关系具体的实现细节
    • 通过接口(万能的点 .
    • 还可以给予特定的访问权限来使用类的成员
    • 明确区分内外
      • 类的实现者 可以修改内部封装的东西而不影响外部调用者
      • 外部调用者 只需要直到自己可以使用该类对象的哪些功能

    私有属性和私有方法

    • 标识符以双下划线 __ 开头的是私有成员,在外部不可以直接用这种属性或方法名调用,子类中也不能访问到这个数据
    • 可以提供外界访问的接口
      • 将不需要对外提供的内容都隐藏起来
      • 把属性都隐藏,提供公共方法对其访问
    • 双下划线开头的属性在继承给子类时,子类是无法覆盖的

    私有方法示例:

    class Person:
        def __init__(self, name, age):
            self.__name = name
            self.__age = age
        def get_age(self):
            return self.__age
        def set_age(self, age):
            self.__age = age
    xiaoming = Person('小明', 17)
    # print(xiaoming.__age)    # 程序会报错,找不到__age属性
    print(xiaoming.get_age())
    xiaoming.set_age(20)
    print(xiaoming.get_age())
    

    输出的结果为:

    17
    20
    

    私有属性和私有方法并不是绝对不可以在外部访问和修改。我们可以通过在私有属性或方法名前加上 _类名,就可以调用私有属性和方法了:

    class Person:
        def __init__(self, name, age):
            self.__name = name
            self.__age = age
        def get_age(self):
            return self.__age
        def set_age(self, age):
            self.__age = age
    xiaoming = Person('小明', 17)
    print(xiaoming._Person__age)
    xiaoming._Person__age = 20
    print(xiaoming._Person__age)
    

    破解私有属性和私有方法:

    • 在名称前加上 _类名
    • 其实双下划线仅仅是一种变形操作:
      • 类中所有双下划线开头的名称如 __x 都会自动变形成:_类名__x 的形式

    封装总结

    • 对外隐藏类内的具体实现,只提供接口,供外界使用
    • 可以将属性和方法设置成私有的,__,设置成私有后,类内部可以访问,类外部无法访问
  • 相关阅读:
    如何创建并运行Java线程
    PHP捕获Fatal error错误与异常处理
    WEB系统启动时加载Log4j的配置文件
    Log4j日志配置
    CharacterEncodingFilter-Spring字符编码过滤器
    Struts2的属性驱动与模型驱动的区别
    Filter之——GZIP全站压缩
    乱码问题总结
    【总结】编写自己的JDBC框架
    四大域总结
  • 原文地址:https://www.cnblogs.com/shuoliuchina/p/12430913.html
Copyright © 2011-2022 走看看