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...
    
  • 相关阅读:
    oracle 静默安装
    浅析hybrid模式下地支付宝钱包和微信
    LeetCode96_Unique Binary Search Trees(求1到n这些节点能够组成多少种不同的二叉查找树) Java题解
    hdu 5411 CRB and Puzzle 矩阵高速幂
    Hadoop作业性能指标及參数调优实例 (三)Hadoop作业性能參数调优方法
    实现Android4.4系统设置分页滑动浏览功能
    oracle 数据库中数据导出到excel
    Nginx配置upstream实现负载均衡
    公司须要内部的地图服务,准备自己去开发可是成本太高,如今有没有专门为企业提供GIS地图开发的产品呀?大概价格多少?
    图片在内存中的占用的空间大小
  • 原文地址:https://www.cnblogs.com/infuture/p/13352847.html
Copyright © 2011-2022 走看看