中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python基礎特性之函數property

發布時間:2020-07-27 22:33:26 來源:網絡 閱讀:356 作者:nineteens 欄目:編程語言

  函數property

  1.為了保護屬性,不讓它隨意的被更改(a.width=xxx)(起碼,要符合某些條件),所以我們引入了set和get方法,雖然這個需要自定義(如下圖的set_size,get_size方法)。

  >>> class Rectangle:

  ... def __init__(self):

  ... self.width=0

  ... self.height=0

  ... def set_size(self,size):

  ... self.width,self.height=size

  ... def get_size(self):

  ... return self.width,self.height

  ...

  >>> r=Rectangle()

  >>> r.width=10

  >>> r.height=5

  >>> r.get_size()

  (10, 5)

  >>> r.set_size((150,100))

  #注意:

  #r.set_size((150,100))即:

  #self.width,self.height=(150,100)或150,100 即:

  #self.width=150,self.height=100

  >>> r.width

  150

  >>> r.height

  100

  2.但是這樣設置和取得屬性值(這里指size的值)太麻煩了,如果要設置和取得多個屬性的值,要使用非常多次的set和get方法,所以,這里,我們將set和get方法封裝起來,讓用戶像width和height一樣快速賦值和訪問。

  >>> class Rectangle:

  ... def __init__(self):

  ... self.width=0

  ... self.height=0

  ... def set_size(self,size):

  ... self.width,self.height=size

  ... def get_size(self):

  ... return self.width,self.height

  #使用property函數,將size的get和set方法都封裝到size這個變量中

  ... size=property(get_size,set_size)

  ...

  >>> r=Rectangle()

  >>> r.width=10

  >>> r.height=5

  >>> r.size #快速訪問size,取得size的值,無需關心size內部的獲取值的函數細節

  (10, 5)

  >>> r.size=150,100

  >>> r.width

  150

  >>> r.size=(100,50) #快速設置size的值,無需關心size內部的設置值的函數細節

  >>> r.width

  100

  >>> r.height

  50

  Tips——關于property的參數問題:

  class property([get[, set[, del[, doc]]]])

  #注:

  # 1.get -- 獲取屬性值的函數

  # 2.set -- 設置屬性值的函數

  # 3.del -- 刪除屬性值函數

  # 4.doc -- 屬性描述信息

  沒有傳遞任何參數的時候,如:size=property(),則創建的特性size將既不可讀也不可寫。

  只傳遞一個參數的時候,如:size=property(get_size),則創建的特性size將是只讀的。

  傳遞三個參數,即傳遞set、get和del。

  傳遞四個參數,即傳遞set、get、del和doc(文檔字符串,用于描述屬性,直接傳入信息的內容string即可)。如:

  size = property(get, set, del, "I'm the 'x' property.")

  靜態方法和類方法鄭州人流多少錢 http://mobile.zyyyzz.com/

  >>> class MyClass:

  ... def meth():

  ... print("This is a common method")

  # 創建靜態方法

  # 方法一:手工替換

  ... def smeth():

  ... print("This is a static method")

  ... smeth=staticmethod(smeth)

  # 方法二:使用修飾器

  ... # @staticmethod

  ... # def smeth():

  ... # print("This is a static method")

  # 創建類方法

  # 方法一:手工替換

  ... def cmeth(cls):

  ... print("This is a class method")

  ... cmeth=classmethod(cmeth)

  # 方法二:使用修飾器

  ... # @classmethod

  ... # def cmeth(cls):

  ... # print("This is a class method")

  ...

  #通過類直接訪問方法

  >>> MyClass.meth()

  This is a common method

  >>> MyClass.smeth()

  This is a static method

  >>> MyClass.cmeth()

  This is a class method

  #通過類實例訪問方法

  >>> myclass=MyClass()

  >>> myclass.meth() #實例myclass會將自身作為一個參數傳遞給meth方法,而meth方法并沒有為它定義參數self,從而導致異常

  Traceback (most recent call last):

  File "", line 1, in

  TypeError: meth() takes 0 positional arguments but 1 was given

  >>> myclass.smeth()

  This is a static method

  >>> myclass.cmeth()

  This is a class method


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

台东县| 河东区| 麻城市| 平和县| 弥渡县| 兴安盟| 铜川市| 同心县| 淮阳县| 北川| 长寿区| 石家庄市| 桂平市| 英超| 沙湾县| 军事| 静海县| 监利县| 吉木乃县| 中超| 顺平县| 长岭县| 株洲市| 台山市| 平乐县| 古丈县| 苏尼特右旗| 土默特左旗| 门源| 三亚市| 青田县| 珲春市| 婺源县| 宣恩县| 抚远县| 孟村| 鹤山市| 凤阳县| 赤城县| 麻栗坡县| 扶沟县|