• 【代码学习】PYTHON 私有化


    一、私有化

    xx: 公有变量
    _x: 单前置下划线,私有化属性或方法,from somemodule import *禁止导入,类对象和子类可以访问
    __xx:双前置下划线,避免与子类中的属性命名冲突,无法在外部直接访问(名字重整所以访问不到)
    __xx__:双前后下划线,用户名字空间的魔法对象或属性。例如:__init__ , __ 不要自己发明这样的名字
    xx_:单后置下划线,用于避免与Python关键词的冲突

    class Test(object):
        def __init__(self):
            self.__num = 100
        def setNum(self,newNum):
            self.__num = newNum
        def getNum(self):
            return self.__num
    
    t = Test()
    
    print t.getNum()
    t.setNum(50)
    print t.getNum()

    当__num设置成私有属性后,Test方法无法直接调用,可定义另一个函数间接调用

    以上代码运行结果

    >>> 
    100
    50
    >>> 

    二、属性property

    相当于把方法进行了封装, 开发者在对属性设置数据的时候更方便

    取值的时候自己调用值

    class Test(object):
        def __init__(self):
            self.__num = 100
        def setNum(self,newNum):
            self.__num = newNum
        def getNum(self):
            return self.__num
        num = property(getNum,setNum)
    t = Test()
    
    #注意点:
    #t.num 到底是调用getNum()还是setNum(),要根据实际的场景来判断,
    
    t.num = 200     #相当于调用了 t.setNum(200)
    print t.num     #相当于调用了 t.getNum() 

    另一种使用方法

    class Test(object):
        def __init__(self):
            self.__num = 100
        @property
        def num(self):
            print("----getter----")
            return self.__num
        @num.setter
        def num(self,newNum):
            print("----setter----")
            self.__num = newNum
    
    
    t = Test()
    
    #注意点:
    #t.num 到底是调用getNum()还是setNum(),要根据实际的场景来判断
    
    t.num = 200     #相当于调用了 t.setNum(200)
    print t.num   #相当于调用了 t.getNum() 
  • 相关阅读:
    类,对象和方法
    jmeter对接口测试入参进行MD5加密
    Jmeter配置代理进行录制
    MYSQL——having 和 where的区别
    MySQL
    Python——面试编程题
    mysql——面试题
    Vue——解决跨域请求问题
    Vue——axios网络的基本请求
    ES6 数组map(映射)、reduce(汇总)、filter(过滤器)、forEach(循环迭代)
  • 原文地址:https://www.cnblogs.com/sqyysec/p/7182951.html
Copyright © 2020-2023  润新知