一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - python @property的用法及含義全面解析

python @property的用法及含義全面解析

2021-01-11 00:16qq41673534 Python

下面小編就為大家分享一篇python @property的用法及含義全面解析,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

在接觸python時最開始接觸的代碼,取長方形的長和寬,定義一個長方形類,然后設置長方形的長寬屬性,通過實例化的方式調用長和寬,像如下代碼一樣。

?
1
2
3
4
5
6
class Rectangle(object):
  def __init__(self):
    self.width =10
    self.height=20
r=Rectangle()
print(r.width,r.height)

此時輸出結果為10 20

但是這樣在實際使用中會產生一個嚴重的問題,__init__ 中定義的屬性是可變的,換句話說,是使用一個系統的所有開發人員在知道屬性名的情況下,可以進行隨意的更改(盡管可能是在無意識的情況下),但這很容易造成嚴重的后果。

?
1
2
3
4
5
6
7
8
class Rectangle(object):
  def __init__(self):
    self.width =10
    self.height=20
r=Rectangle()
print(r.width,r.height)
r.width=1.0
print(r.width,r.height)

以上代碼結果會輸出寬1.0,可能是開發人員不小心點了一個小數點上去,但是會系統的數據錯誤,并且在一些情況下很難排查。

這是生產中很不情愿遇到的情況,這時候就考慮能不能將width屬性設置為私有的,其他人不能隨意更改的屬性,如果想要更改只能依照我的方法來修改,@property就起到這種作用(類似于java中的private)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Rectangle(object):
  def width(self):
    #變量名不與方法名重復,改為true_width,下同
    return self.true_width
 
  @property
  def height(self):
    return self.true_height
s = Rectangle()
#與方法名一致
s.width = 1024
s.height = 768
print(s.width,s.height)

(@property使方法像屬性一樣調用,就像是一種特殊的屬性)

此時,如果在外部想要給width重新直接賦值就會報AttributeError: can't set attribute的錯誤,這樣就保證的屬性的安全性。

同樣為了解決對屬性的操作,提供了封裝方法的方式進行屬性的修改

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Rectangle(object):
  @property
  def width(self):
    # 變量名不與方法名重復,改為true_width,下同
    return self.true_width
  @width.setter
  def width(self, input_width):
    self.true_width = input_width
  @property
  def height(self):
    return self.true_height
  @height.setter
  #與property定義的方法名要一致
  def height(self, input_height):
    self.true_height = input_height
s = Rectangle()
# 與方法名一致
s.width = 1024
s.height = 768
print(s.width,s.height)

此時就可以對“屬性”進行賦值操作,同樣的方法還del,用處是刪除屬性,寫法如下,具體實現不在贅述。

?
1
2
3
@height.deleter
def height(self):
    del self.true_height

總結一下@property提供了可讀可寫可刪除的操作,如果像只讀效果,就只需要定義@property就可以,不定義代表禁止其他操作。

以上這篇python @property的用法及含義全面解析就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:http://blog.csdn.net/qq_41673534/article/details/79221070

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 我的年轻漂亮继坶三级 | 美女张开腿黄网站免费精品动漫 | 免费超级乱淫视频播放性 | 欧美同志video 在线观看 | 国产在线视频第一页 | 99久久免费国内精品 | 99久久国产综合精品麻豆 | 亚洲国产第一区二区三区 | 美女下面被cao出水 美女污视频 | 精品久久久久久久久久香蕉 | 丰满的闺蜜2中文字幕 | 亚洲国产精品热久久 | 波多野结衣两女调教 | 99撸| 国产伦码精品一区二区三区 | 91免费精品国自产拍在线不卡 | 四虎影院在线免费播放 | 草莓香蕉榴莲丝瓜秋葵绿巨人在线看 | 99美国热| 欧美日韩精品乱国产538 | 久久艹综合 | 60岁妇女毛片免费观看 | 深夜影院深a | 赤坂丽女医bd无删减在线观看 | 欧美精品99久久久久久人 | 男女男精品视频免费观看 | 久久久久久久尹人综合网亚洲 | 国产午夜免费视频 | 免费在线视频成人 | 国产一卡2卡3卡4卡公司科普 | 好大好硬好紧太深了受不了 | 色偷偷亚洲男人 | 好涨好大我快受不了了视频网 | 女人是男人的未来1分49分 | 性夜影院午夜看片 | 国产精品网页 | 97精品国产自在现线免费 | 男人女人日皮 | 青青草久 | 91香蕉视频在线 | 精品国产在线观看 |