Python中私有化以及property的使用

私有化

  • 当一个模块中的全局变量名、函数名、类名前面加上一个或者两个下划线时,其他模块通过from module_name import *不能将其导入;但通过import module_name依然可以导入。
  • 类中的私有方法或者私有属性之所以在外面不能调用是因为Python的名字重整机制(在原来的名前面添加了前缀)。

property的使用

  • 当类中属性定义为私有属性时,往往需要两个函数分别用来获取属性值(get方法)和设置属性值(set方法)。但是这种直接调用这两种方法使用起来不够方便,为了能像直接使用属性一样使用这两种方法,就出现了property。
  • 要做到这一点,能够通过两种方式实现,下面通过代码进行讲解:
#第一种方式
class Test(Object):
    def __init__(self):
        self.__num = 100

    #get_num函数专门用来获取__num属性值
    def get_num(self):
        return self.__num

    #set_num函数专门用来设置__num属性值    
    def set_num(self,new_num):
        self.__num = new_num

    #定义的num就是在外面用到的属性名,property括号中前面放get方法的名字,后面放set方法的名字
    num = property(get_num,set_num)

t = Test()
t.num = 200#直接通过访问属性的形式来调用set_num()方法,并将等号右边的参数传进去
print(t.num)#通过同样的方式来调用get_num()方法
#虽然都是t.num的方式调用方法,Python解释器会根据是否有赋值来选择调用的方法
#第二种方式
class Test(Object):
    def __init__(self):
        self.__num = 100

    #在get方法的上面写上@property,函数的名字就是属性的名字
    @property
    def num(self):
        return self.__num

    #在set方法的上面写上@属性名.setter,函数的名字更get方法相同,都等于属性的名字
    @num.setter
    def num(self,new_num):
        self.__num = new_num

t = Test()
t.num = 200#调用了下面的num()方法进行设置
print(t.num)#调用了上面的num()方法获取值

猜你喜欢

转载自blog.csdn.net/gaishi_hero/article/details/81838683