python私有化问题

  • xx: 公有变量

  • _x: 单前置下划线,私有化属性或方法,from somemodule import*禁止导入,类对象和子类可以访问

  • __xx:双前置下划线,避免与子类中的属性命名冲突,无法在外部直接访问(名字重整所以访问不到)

  • xx:双前后下划线,用户名字空间的魔法对象或属性。例如: _ init _ ,不要自己发明这样的名字

  • xx_:单后置下划线,用于避免与Python关键词的冲突

property

当我们在一个类中设置了一个私有变量,但是在外部调用的时候我们想要访问这个私有变量的数据,那么我们会在类的内部写一个get方法和一个set方法来实现访问私有变量,如下:

    class Text(object):
        def __init__(self):
            self.__number = 100

        def setNumber(self, newNumber):
            self.__number = newNumber

        def getNumber(self):
            return self.__number

    t = Text()
    t.setNumber(200)
    print(t.getNumber)

然而这样通过get、set方法访问私有变量而言我们还是觉得比较麻烦,那么我们可以使用property来实现

    class Text(object):
        def __init__(self):
            self.__number = 100

        def setNumber(self, newNumber):
            self.__number = newNumber

        def getNumber(self):
            return self.__number

        num = property(getNumber, setNumber)

    t = Text()
    t.num = 200
    print(t.num)

还有一种更简便的写法,用装饰器加上property实现

    class Text(object):
        def __init__(self):
            self.__number = 100

        @property
        def num(self):
            return self.__number

        @num.setter  
        def num(self, newNumber):
            self.__number = newNumber
    t = Text()
    t.num = 200
    print(t.num)

你可能感兴趣的:(Python基础学习之路)