Python 中私有變量的采用
__變量名
定義變量着倾,作用范圍僅限于本類,可采用以下方式操作:(以下代碼采用python3
驗(yàn)證)
- 改變或獲取私有變量的值
class Test(object):
def __init__(self):
self.__num = 100
def setNum(self, newNum):
self.__num = newNum
def getNum(self):
return self.__num
test = Test()
# 調(diào)用setter方法
test.setNum(200)
# 調(diào)用getter方法
print("運(yùn)行結(jié)果:", test.getNum())
- 添加
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) # 添加 property
test = Test()
# 調(diào)用setter方法
test.num = 200 # 相當(dāng)于調(diào)用了跨释,test.setNum(200)
# 調(diào)用getter方法
print("運(yùn)行結(jié)果:", test.num) # 相當(dāng)于調(diào)用了,test.getNum()
注:
若將num = property(getNum, setNum)
中 getNum, setNum 交換位置num = property(setNum, getNum)
會(huì)報(bào)如下錯(cuò)誤:
Traceback (most recent call last):
File "/Users/youmy/PycharmProjects/Learn/setget.py", line 17, in <module>
test.num = 200
TypeError: getNum() takes 1 positional argument but 2 were given
Process finished with exit code 1
- 使用
裝飾器
class Test(object):
def __init__(self):
self.__num = 100
@property
def num(self):
return self.__num
@num.setter
def num(self, newNume):
self.__num = newNume
test = Test()
# 調(diào)用setter方法
test.num = 200 # 相當(dāng)于調(diào)用了酿傍,test.setNum(200)
# 調(diào)用getter方法
print("運(yùn)行結(jié)果:", test.num) # 相當(dāng)于調(diào)用了炉媒,test.getNum()