您好,登錄后才能下訂單哦!
函數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
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。