接下來我帶大家了解乙個函式的作用以及使用技巧,希望對大家都有幫助,話不多說,接下來就開始我的表演特性
首先property
有兩種用法,一種是作為函式的用法,一種是作為裝飾器的用法,接下來我們就逐一分析
property函式
看一下作為函式它包含的引數都有哪些
property(fget=none, fset=none, fdel=none, doc=none)
分析
fget
是獲取屬性值的方法。
fset
是設定屬性值的方法。
fdel
是刪除屬性值的方法。
doc
是屬性描述資訊。如果省略,會把fget方法的docstring拿來用(如果有的話)
首先在繫結屬性時,如果我們直接把屬性暴露出去,雖然寫起來很簡單,但是,沒辦法檢查引數,導致可以把屬性隨便改,如下例子
像上面這樣寫肯定是不行的,我們傳入的屬性值根本就無法去進行驗證,看一下不用property函式的例子class
student
(object):
pass
s = student
s.score =
99print
(s.score)
# 99
觀察上面的例子我們是不能在外部直接訪問score屬性的,但是我們在裡面設定了幾個方法,包括獲取score,設定score,刪除score,並且在設定屬性上面我們進行了判斷,那麼這個時候我們分數就不能隨心所欲了,但是這是通過呼叫方法來達到目的class
student
:def
__init__
(self)
: self._score =
''def
get_score
(self)
:return self._score
defset_score
(self, value):if
notisinstance
(value,
int)
:raise valueerror(
'分數必須是數字'
)if value >
100or value <0:
raise valueerror(
'分數不符實際'
) self._score = value
defdel_score
(self)
:del self._score
s = student(
)s.set_score(90)
(s.get_score())
s.set_score(
150)
(s.get_score())
# 報錯
s.del_score(
(s.get_score())
# 報錯
當屬性賦值給property函式並傳入對應的方法,那麼這個屬性就能夠呼叫了,實際上,呼叫函式property時,還可不指定引數、指定乙個引數、指定三個引數或指定四個引數。如果沒有指定任何引數,建立的特性將既不可讀也不可寫。如果只指定乙個引數(獲取方法),建立的特性將是唯讀的。第三個引數是可選的,指定用於刪除屬性的方法(這個方法不接受任何引數)。第四個引數也是可選的,指定乙個文件字串。class
student
:def
__init__
(self)
: self._score =
''def
get_score
(self)
:return self._score
defset_score
(self, score)
: self._score = score
defdel_score
(self)
:del self._score
score =
property
(get_score, set_score, del_score, doc=
'學生分數'
)s = student(
('檢視屬性的文件字串:'
+ student.score.__doc__)
# 檢視屬性的文件字串:學生分數
s.score =
100print
(s.score)
# 100
del s.score
(s.score)
# 報錯
@property裝飾器
@property
提供了比property()
函式更簡潔直觀的寫法。
被@property
裝飾的方法是獲取屬性值的方法,被裝飾方法的名字會被用做屬性名。
被@屬性名.setter
裝飾的方法是設定屬性值的方法。
被@屬性名.deleter
裝飾的方法是刪除屬性值的方法。
總結:class
student
:def
__init__
(self)
: self._score =
'' @property
defscore
(self)
:return self._score
@score.setter
defscore
(self, value):if
notisinstance
(value,
int)
:raise valueerror(
'分數必須是數字'
)if value >
100or value <0:
raise valueerror(
'分數不符實際'
) self._score = value
@score.deleter
defscore
(self)
:del self._score
s = student(
)s.score =
100print
(s.score)
# 100
s.score =
150print
(s.score)
# 報錯
del s.score
(s.score)
# 報錯
一文搞懂transform skew
目錄 如何理解斜切 skew,先看乙個 demo。在下面的 demo 中,有 4 個正方形,分別是 紅色 不做 skew 變換,綠色 x 方向變換,藍色 y 方向變換,黑色 兩個方向都變換,拖動下面的滑塊可以檢視改變 skew 角度後的效果。切換 selector 可以設定 transform or...
一文搞懂記憶體屏障
gcc編譯選項中有個 o選項,表示編譯 的時候進行優化。這樣就會出現一種可能 優化後的 和優化前的 順序不一致。來看個例子 8 include9 10 int a,b 11 12 int main 13 很簡單,我們使用不加優化選項來將其編譯為組合語言 yuhao laplace workspace...
一文搞懂WordPress建站
文章首發於 日日夜夜的等待,wordpress建站教程終於來了。本篇文章適用於第一次建站的小白,幫助你從零搭建起乙個屬於自己的 既然是從零,那麼我就會帶著你從購買網域名稱等到一直搭建成功,接下來請往下看吧。建 本身是沒有什麼難度的,畢竟現在搭建乙個 的成本也很低,只是配套需要的東西有些繁瑣,我們先把...