溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python魔法方法之描述符類的示例分析

發(fā)布時(shí)間:2021-05-27 11:23:51 來源:億速云 閱讀:154 作者:小新 欄目:開發(fā)技術(shù)

這篇文章給大家分享的是有關(guān)Python魔法方法之描述符類的示例分析的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。

描述符類要求:

描述符就是將某種特殊類型的類的實(shí)例指派給另一個(gè)類的屬性

至少要實(shí)現(xiàn)以下的一個(gè)方法:

?__get__(self, instance, owner)
–用于訪問屬性,它返回屬性的值

?__set__(self, instance, value)
–將在屬性分配操作中調(diào)用,不返回任何內(nèi)容

?__delete__(self, instance)
–控制刪除操作,不返回任何內(nèi)容

eg:

>>> class MyDecriptor:
    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("deleting...",self,instance)
>>> class Test:
    x = MyDecriptor()   #取Mydecriptor類的實(shí)例指派給Test類的屬性x

測(cè)試:

Python魔法方法之描述符類的示例分析

eg:

>>> 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)

        
>>> class C:
    def __init__(self):
        self._x = None
    def getX(self):
        return self._x
    def setX(self,value):
        self._x = value
    def delX(self):
        del self._x
    x = MyProperty(getX,setX,delX)

    
>>> c = C()
>>> c.x = "HELLOW"
>>> c.x
'HELLOW'
>>> c._x
'HELLOW'
>>> del c.x
>>> c._x

eg:

攝氏度轉(zhuǎn)華氏度:華氏度=攝氏度*1.8+32

要求:

?先定義一個(gè)溫度類,然后定義兩個(gè)描述符類用于描述攝氏度和華氏度兩個(gè)屬性。
?要求兩個(gè)屬性會(huì)自動(dòng)進(jìn)行轉(zhuǎn)換,也就是說你可以給攝氏度這個(gè)屬性賦值,然后打印的華氏度屬性是自動(dòng)轉(zhuǎn)換后的結(jié)果。

ss Celsius:  #攝氏度描述符類
    def __init__(self,value = 26.0):#self為描述符類自身(此為攝氏度描述符類)的實(shí)例(此為cel)
        self.value = float(value)
    def __get__(self,instance,owner):#instance是這個(gè)描述符的擁有者所在的類的實(shí)例(此為temp)
        return self.value
    def __set__(self,instance,value):#owner是這個(gè)描述符的擁有者所在的類本身(此為溫度類)
        self.value = float(value)

class Fahrenheit:   #華氏度描述符類
    def __get__(self,instance,owner):
        return instance.cel * 1.8 +32  #攝氏度轉(zhuǎn)華氏度
    def __set__(self,instance,value):
        instance.cel = ((float)(value)- 32)/ 1.8 
        ## instance.cel 則會(huì)執(zhí)行Temperature.cel,接著執(zhí)行Celsius類中的__set__方法
        
class Temperature:   #溫度類
    cel = Celsius()   #設(shè)置攝氏度屬性(描述符類的實(shí)例指派給了溫度類的屬性)
    fah = Fahrenheit()# temp.fah ,當(dāng)屬性fah被賦值的時(shí)候,則會(huì)執(zhí)行Fahrenheit描述符類的__set__方法
						
>>> temp = Temperature()
>>> temp.cel
26.0
>>> temp.fah
78.80000000000001
>>> temp.fah = 78.8
>>> temp.cel
25.999999999999996

python有哪些常用庫

python常用的庫:1.requesuts;2.scrapy;3.pillow;4.twisted;5.numpy;6.matplotlib;7.pygama;8.ipyhton等。

感謝各位的閱讀!關(guān)于“Python魔法方法之描述符類的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI