Python學習 描述符(property的原理)

2021-09-10 09:03:29 字數 3686 閱讀 1047

(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...