class Cla:
__count=0
def __init__(self,v):
self.__value=v
Cla.__count+=1
def show(self):
print('普通實例方法訪問私有屬性:',self.__value,Cla.__count)
@classmethod
def classShow(cls):
print('修飾器類方法訪問私有屬性:',cls.__count)
@property
def value(self):
print('修飾器保護方法:',self.__value)
@staticmethod
def staticShow():
print('修飾器靜態方法訪問私有屬性:',Cla.__count)
cla=Cla(5)
cla.show()
cla.classShow()
cla.staticShow()
print()
cla2=Cla(10)
cla2.show()
cla2.classShow()
cla2.staticShow()
print()
Cla.show(cla)
Cla.classShow()
Cla.staticShow()
print()
cla.value
#cla.value=99
#del cla.value
第三段是通過類名調用類方法。
可以發現,實例cla和實例cla2調用類構造方法的私有屬性__value相互獨立,類私有屬性__count實例共用。
修飾器類方法參數cls與類名相同。
cla.value=99
del cla.value
增加兩行代碼測試後,發現修飾器保護方法可讀不可寫,也不可刪除。
如下修改可自定義property的讀寫方法:
class Cla:
def __init__(self,v):
self.__value=v
def __getValue(self):
print(self.__value)
def __setValue(self,v):
self.__value=v
def __delValue(self):
del self.__value
value=property(__getValue,__setValue,__delValue)
cla=Cla(5)
cla.value
cla.value=10
cla.value
#del cla.value
#cla.value
增加測試刪除代碼
del cla.value
cla.value