私有化
- 当一个模块中的全局变量名、函数名、类名前面加上一个或者两个下划线时,其他模块通过
from module_name import *
不能将其导入;但通过import module_name
依然可以导入。
- 类中的私有方法或者私有属性之所以在外面不能调用是因为Python的名字重整机制(在原来的名前面添加了前缀)。
property的使用
- 当类中属性定义为私有属性时,往往需要两个函数分别用来获取属性值(get方法)和设置属性值(set方法)。但是这种直接调用这两种方法使用起来不够方便,为了能像直接使用属性一样使用这两种方法,就出现了property。
- 要做到这一点,能够通过两种方式实现,下面通过代码进行讲解:
class Test(Object):
def __init__(self):
self.__num = 100
def get_num(self):
return self.__num
def set_num(self,new_num):
self.__num = new_num
num = property(get_num,set_num)
t = Test()
t.num = 200
print(t.num)
class Test(Object):
def __init__(self):
self.__num = 100
@property
def num(self):
return self.__num
@num.setter
def num(self,new_num):
self.__num = new_num
t = Test()
t.num = 200
print(t.num)