zoukankan      html  css  js  c++  java
  • Python面向对象7.隐藏数据

    通过"私有属性"实现数据的隐藏

    一、引入

    class Cat(object):
        def __init__(self, new_name, new_age):
            self.name = new_name
            self.age = new_age
    
        def print_info(self):
            print("我叫%s,今年%s了" % (self.name, self.age))
    
    
    # 创建猫对象
    cat = Cat("波斯猫", 4)
    # 调用方法
    cat.print_info()
    # 尝试修改属性
    cat.age = -10
    # 调用方法
    cat.print_info()
    

      

     

    如果运行上述代码,会发现,第二次输出的信息有误,其为"我交波斯猫,今年-10岁了"

    之所以出现这样的错误,究其原因是因为:我们通过对象直接给实例属性赋值的这种方式容易出错

    如果在赋值的时候,是通过一个实例方法的调用,在方法中对数据进行严格的检查,合格的数据可以给属性设置,不合格的数据就提醒开发者,这样一来就能够保证数据的准确性了

    那该怎样实现呢

    答:

    1. 设置属性为私有属性
    2. 添加额外对属性操作的方法

    二、实现对数据的隐藏

    想要实现上述阐述的那个功能,我们需要做2件事情

    1. 设置属性为私有属性
    2. 添加额外对属性操作的方法

    1. 设置属性为私有属性

    在Python中,如果想要设置为私有的属性,那么仅仅需要在定义属性时在前面加两个下划线__即可

    示例如下

    class 类名(object):
        def __init__(self):
            self.name = "王老师"
            self.__age = 18  # 这个属性就是私有属性
    

      

     

    既然有了私有属性,那对象能够直接操作它呢?

    答:不能,否则就没有私有的作用了

    示例如下

    class Teacher(object):
        def __init__(self):
            self.name = "王老师"
            self.__age = 18  # 这个属性就是私有属性
    
    
    t = Teacher()
    print(t.name)  # 能够获取
    print(t.__age)  # 此时会程序报错,因为__age是私有属性,不能通过对象直接操作
    

      

     

    2. 添加额外对属性操作的方法

    想要实现对私有属性的操作,我们需要定义方法,在方法中操作

    示例

    class Teacher(object):
        def __init__(self):
            self.name = "王老师"
            self.__age = 18  # 这个属性就是私有属性
    
        def set_age(self, new_age):
            if 1 <= new_age <= 120:
                self.__age = new_age
                print("设置年龄成功")
            else:
                print("年龄数据有误...")
    
        def get_age(self):
            return self.age
    
    
    t = Teacher()
    t.set_age(20)  # 设置年龄
    print(t.get_age())  # 获取年龄
    

      

     

    三、总结

    1.操作属性有2种方法

    直接通过对象名修改

    对象名.属性名 = 数据
    

      

    通过方法间接修改

    对象名.方法名(数据)
    

      

    2.通过使用方法来进行修改,就可以在方法中进行数据合法性的检查

    3.通过__可以将属性变为私有属性,这样就防止了通过对象直接操作属性时可能带来的隐患

  • 相关阅读:
    MVC,MVP,MVVM的区别
    jQuery Mobile 实现苹果滑动删除闹钟功能的几点总结
    AngularJS执行流程详解
    基于angularJS的表单验证练习
    jQuery 中 attr() 和 prop() 方法的区别
    天猫消息盒子的CSS实现
    jQuery事件之传递参数
    浅谈js中的垃圾两种回收机制
    js中的DOM操作汇总
    log4net
  • 原文地址:https://www.cnblogs.com/dong4716138/p/15726115.html
Copyright © 2011-2022 走看看