• 【代码学习】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() 
  • 相关阅读:
    POJ 3616 Milking Time(简单区间DP)
    AizuOJ ALDS1_7_A Rooted Trees(有根树的表达)
    jQuery中 attr() 和 prop() 的区别
    前后端交互模式
    快速排序
    冒泡排序实现
    Vue 组件间进行通信
    JavaScript 数组常用方法
    如何将内网映射到公网?
    javax.mail.AuthenticationFailedException: 535 Login Fail. Please enter your authorization code to login. More information in
  • 原文地址:https://www.cnblogs.com/sqyysec/p/7182951.html
Copyright © 2020-2023  润新知