zoukankan      html  css  js  c++  java
  • 【代码学习】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() 
  • 相关阅读:
    STM32驱动WS2811
    Arduino编程器 USBasp USBtinyISP FT232-ISP 对比 区别
    USBasp制作资料及全过程(菜鸟版)
    用74HC165读8个按键状态
    C++ 使用TinyXML解析XML文件
    SD卡中FAT32文件格式快速入门(图文详细介绍)
    一个UUID生成算法的C语言实现——WIN32版本
    关于STM8S使用硬件SPI收发问题
    设计模式介绍、分类、原则
    构建完整的知识体系
  • 原文地址:https://www.cnblogs.com/sqyysec/p/7182951.html
Copyright © 2011-2022 走看看