zoukankan      html  css  js  c++  java
  • Python3笔记040

    第7章 面向对象程序设计

    • 7.1 面向对象概述
    • 7.2 类的定义
    • 7.3 类的实例化
    • 7.4 访问限制
    • 7.5 继承
    • 7.6 封装
    • 7.7 多态
    • 7.8 装饰器
    • 7.9 特殊方法

    7.6 封装

    封装是指将数据与具体操作的实现代码放在某个对象内部,使这些代码的实现细节不被外界发现,外界只能通过接口使用该对象,而不能通过任何形式修改对象内部实现,正是由于封装机制,程序在使用某一对象时不需要关心该对象的数据结构细节及实现操作的方法。使用封装能隐藏对象实现细节,使代码更易维护,同时因为不能直接调用、修改对象内部的私有信息,在一定程度上保证了系统安全性。

    对实例属性进行封装,变成私有属性

    # 定义一个Person类,两个实例属性,类的实例属性life_val可以在类外部任意被修改
    class Person():
    
        def __init__(self, name):
            self.name = name
            self.life_val = 100  # 实例属性
    
    
    p1 = Person("John")  # 实例化
    p1.life_val = 90  # 修改实例属性值
    print(p1.life_val)
    output:
    90
    
    # 把Person类的实例属性名前加双下划线,这一步只是实现私有化了,外部不能访问了,但还没实现封装
    class Person():
    
        def __init__(self, name):
            self.name = name
            self.__life_val = 100  # 实例属性
    
    
    p1 = Person("John")  # 实例化
    print(p1.__life_val)
    output:
    AttributeError: 'Person' object has no attribute '__life_val'
    
    # 外部如果有需要访问呢?类中加方法,这才是封装,封装后外部又可以访问了,但不能任意修改了
    class Person():
    
        def __init__(self, name):
            self.name = name
            self.__life_val = 100  # 实例属性
        def get_life_val(self):
            return self.__life_val
    
    p1 = Person("John")  # 实例化
    print(p1.get_life_val())
    output:
    100
    

    对方法进行封装,变成私有方法

    # 方法前加双下划线,变成私有方法,实现封装
    class Person():
    
        def __init__(self, name):
            self.name = name
            self.__life_val = 100  # 实例属性
    
        def __breath(self, name):
            print("%s is breathing..."%self.name)
    
        def get_life_val(self):
            return self.__life_val
    
    p1 = Person("John")  # 实例化
    print(p1.get_life_val())
    print(p1.breath("John"))
    output:
    John is breathing...
    
    # 将类中方法私有化,变成只是类中方法可以调用的,方法名前加双下划线
    # 外部如果有需要访问呢?类中加方法
    class Person():
    
        def __init__(self, name):
            self.name = name
            self.__life_val = 100  # 实例属性
    
        def __breath(self, name):  # 私有方法
            print("%s is breathing..." % self.name)
    
        def get_life_val(self):
            return self.__life_val
    
        def attack(self, name):
            self.__breath(name)  # 调用私有方法__breath
    
    
    p1 = Person("John")  # 实例化
    p1.attack("John")
    output:
    John is breathing...
    
  • 相关阅读:
    android笔记5——同一个Activity中Fragment的切换
    JavaScript 刚開始学习的人应知的 24 条最佳实践
    位运算符之异或的化腐朽为奇妙
    unity常见问题之20题
    汉澳sinox不受openssl心血漏洞影响并分析修复其漏洞代码
    基于canvas和Web Audio的音频播放器
    poj2595(凸包)
    HDU 1257 最少拦截系统(dp)
    【iOS开发-33】学习手动内存管理临时抛弃ARC以及retain/assign知识——iOSproject师面试必考内容
    万能狗! 程序猿屌丝独自创业之路(一)
  • 原文地址:https://www.cnblogs.com/infuture/p/13352847.html
Copyright © 2011-2022 走看看