(1)描述符:將某種特殊型別的類的例項指派給另乙個類的屬性
(2)特殊類:至少在類裡定義__get__()
、__set__()
或者__delete__
三個特殊方法中的任意乙個
(3)相關魔法方法
魔法方法
含義__get__(self, instance, owner)
用於訪問屬性,它返回屬性的值
__set__(self, instance, value)
將在屬性分配操作中呼叫,不返回任何內容
__delete__(self, instance)
控制刪除操作,不返回任何內容
(4)property 的使用
示例 1
class
mydescriptor
:# self:描述符類本身例項(mydescriptor)
# instance:(test)擁有者本身的例項;owner:(test)
def__get__
(self, instance, owner)
:print
('getting...'
,self,instance,owner)
def__set__
(self, instance, value)
:print
('setting'
,self,instance,value)
def__delete__
(self,instance)
:print
('deletting'
,self,instance)
class
test
:# mydescriptor是x的描述符
x = mydescriptor(
)
這裡由於mydescriptior實現了__get__()、__set__()
和__delete__()
方法,並且將它的類示例指派給test類的屬性,所以mydescriptior就是所謂的描述類
例如當訪問x屬性時,python會自動呼叫描述符__get__( )
方法,幾個引數的內容:self 是描述符類自身的例項;instance是這個描述符的擁有者所在的類的例項,這裡也就是test類的例項;owner是這個描述符的擁有者所在的類本身。
示例 2
class
myproperty
:def
__init__
(self, fget=
none
, fset=
none
, fdel=
none):
self.fget = fget
self.fset = fset
self.fdel = fdel
def__get__
(self, instance, owner)
:return self.fget(instance)
def__set__
(self, instance, value)
: self.fset(instance, value)
def__delete__
(self, instance)
: self.fdel(instance)
classc:
def__init__
(self)
: self._x =
none
defgetx
(self)
:return self._x
defsetx
(self, value)
: self._x = value
defdelx
(self)
:del self._x
# 下面的myproperty與property等價,都是乙個描述符
# 只不過myproperty是自己定義的,而property是內建函式
示例 3
定義乙個溫度類,然後定義兩個描述符類用於描述攝氏度和華氏度兩個屬性,兩個屬性會自動進行轉換,也就是,給攝氏度這個屬性賦值,然後列印華氏度是自動轉換後的結果。
#描述攝氏度
class
celsius
:def
__init__
(self,value =
26.0):
self.value =
float
(value)
def__get__
(self, instance, owner)
:return self.value
def__set__
(self, instance, value)
: self.value =
float
(value)
#描述華氏度
class
fahrenheit
:def
__get__
(self, instance, owner)
:# 此時的instance指的就是temperature
return instance.cel *
1.8+
32def
__set__
(self, instance, value)
: instance.cel =
(float
(value)-32
)/1.8class
temperatue
:#例項化的物件,賦值給cel和fah
4. 示例 4
python 描述 python描述符
在python中,訪問乙個屬性的優先順序順序按照如下順序 1.類屬性2.資料描述符3.例項屬性4.非資料描述符5.getattr 方法。描述符,用一句話來說,就是將某種特殊型別的類的例項指派給另乙個類的屬性 注意 這裡是類屬性,而不是物件屬性 而這種特殊型別的類就是實現了 get set delet...
python 描述符基本
相關資料 python的描述符 下一站,我等你 描述符的本質類 python為開發者提供了乙個非常強大的功能 描述符。那什麼是描述符呢?通過檢視python的官方文件,我們知道把實現了 get set 和 delete 中的其中任意一種方法的類稱之為描述符,描述符的本質是新式類,並且被 的類 即應用...
Python 描述符練習
要求 先定義乙個溫度類,然後定義兩個描述符用於描述攝氏度和華氏度兩個屬性 要求這個兩個屬性會自動進行轉換,也就是說你可以給攝氏度這個屬性賦值,然後列印的話華氏屬性是自動轉換的結果 class celsius def init self,value 26.0 self.value float valu...