Python中總共包括三個內置裝飾器:
1、staticmethod (靜態方法使用)
2、 classmethod (類方法)
3、property (把類的方法偽裝成屬性)
1和2之前介紹過了,主要介紹一下property方法【格式】
@property裝飾適合下面這些場景:
1.只讀不可修改的屬性,只需要實作@property
2.輸入對setter進行判斷,
3.需要實時地計算屬性值,
屬性名=property(fget=None, fset=None, fdel=None, doc=None)
其中,fget 引數用于指定獲取該屬性值的類方法,fset 引數用于指定設定該屬性值的方法,fdel 引數用于指定洗掉該屬性值的方法,最后的 doc 是一個檔案字串,用于說明此函式的作用,
注意:在使用 property() 函式時,以上 4 個引數可以僅指定第 1 個、或者前 2 個、或者前 3 個,當前也可以全部指定,也就是說,property() 函式中引數的指定并不是完全隨意的,
property第一種用法:
#公共屬性 name
#口頭私有屬性 _name(單前置下劃線,私有化屬性或方法,from somemodule import 禁止匯入,類物件和子類可以訪問)
#【在模塊或類外不可以使用,只是約定,不能真正做到不能訪問】
#私有屬性 __name(前置雙下劃線,私有化屬性或方法,只有內部可以訪問,外部不能訪問)
#__init__(python的魔法方法)
class Cup:
def __init__(self,name):
self.__name = name
def setname(self,name):
self.__name = name
def getname(self):
return self.__name
def delname(self):
self.__name = 'hui'
# 為name 屬性配置 property() 函式
name = property(getname, setname, delname, '指明出處')
if __name__ == '__main__':
cip = Cup('huitao')
# 呼叫 getname() 方法
print(cip.name)
# 呼叫 setname() 方法
cip.name = "今天結束"
print(cip.name)
# 呼叫 delname() 方法
del cip.name
print(cip.name)
property第二種用法:
class CUp2:
#__name表示私有屬性
#如果只有@property裝飾,那么value是只讀不可寫的
def __init__(self):
self.__name='name'
@property
def confire(self):
return self.__name
@confire.setter
def confire(self,name):
self.__name=name
@confire.deleter
def confire(self):
del self.__name
if __name__ == '__main__':
cup = CUp2()
#setter
cup.name='huijuju'
# getsetter
print(cup.name)
#deltter
del cup.name
第三種計算屬性:
class compute:
def __init__(self):
self.weight=1
self.height=2
@property
def one(self):
return self.weight/self.height
@property
def two(self):
return self.weight/self.height**2
@property
def three(self):
return self.weight+self.height
if __name__ == '__main__':
com = compute()
print(com.one)
print(com.two)
print(com.three)
輸出:
F:\開發工具\pythonProject\PyClassTest\venv\Scripts\python.exe F:/開發工具/pythonProject/PyClassTest/test03.py
0.5
0.25
3
Process finished with exit code 0
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/389123.html
標籤:其他
上一篇:Selenium(思維導圖)
