最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python使用描述符實現(xiàn)屬性類型檢查的案例解析

 更新時間:2022年05月13日 09:52:59   作者:AllardZhao  
這篇文章主要介紹了Python使用描述符實現(xiàn)屬性類型檢查,實例屬性就是在一個類中將另一個類的實例作為該類的一個數(shù)屬性,本文通過代碼演示給大家介紹的非常詳細(xì),需要的朋友可以參考下

1、如何使用描述符對實例屬性做類型檢查?

實際案例:

在某項目中,我們實現(xiàn)了一些類,并希望能像靜態(tài)類型語言那樣(C,C++,Java)對它們的實例屬性做類型檢查。

p = Person()
    p.name = 'Bob'	# 名字屬性必須是str
    p.age = 18	        # 年齡必須是int
    p.height = 1.83	# 身高必須是float

要求:(1)可以對實例變量名指定類型

(2)賦予不正確類型時拋出異常

解決方案:

使用描述符來實現(xiàn)需要類型檢查的屬性:分別實現(xiàn)__get__, __set__,__delete__方法,在__set__內(nèi)使用isinstance函數(shù)做類型檢查。

拓展:靜態(tài)類型語言變量只能引用一種確定類型的對象并且不能改變。類型檢查是由編譯器在編譯階段完成的,對于Python動態(tài)類型語言來講一個變量可以引用任意類型的對象并且可以實時發(fā)生改變,也就是解釋器不能完成類型檢查,只能自己去實現(xiàn)。

什么是描述符?描述符就是包含__get__, __set__,__delete__這樣方法的類,這三個方法只要包含其中一個那它就是描述符。

實例屬性就是在一個類中將另一個類的實例作為該類的一個數(shù)屬性。

2、代碼演示

(1)描述符定義和訪問流程介紹

class Descriptor(object):
    def __get__(self, instance, cls):
        # instance用于區(qū)分使用類訪問x,還是使用實例訪問x
        print('in __get__', instance, cls)
        return instance.__dict__['x']
    def __set__(self, instance, value):
        # 在set中對于類型進(jìn)行檢查
        print('in __set__')
        instance.__dict__['x'] = value
    def __delete__(self, instance):
        print('in __del__')
class A(object):
    # 在類中定義一個類屬性x
    x = Descriptor()
a = A()
# 會被Descriptor的__get__方法所截獲
print(a.x)
# 直接使用類A訪問類屬性,instance會被傳入None
print(A.x)
# 會被Descriptor的__set__方法所截獲
a.x = 5
# 會被Descriptor的__del__方法所截獲
del a.x
'''
通常來說在描述符這些方法當(dāng)中訪問的是instance.__dict__這個字典,
也就是對于它的真正屬性進(jìn)行操作。
'''
a = A()
a.x = 5
print(a.__dict__)

(2)實現(xiàn)使用描述符檢查實例屬性類型

class Attr(object):
    def __init__(self, name, type_):
        self.name = name
        self.type_ = type_
    def __get__(self, instance, cls):
        return instance.__dict__[self.name]
    def __set__(self, instance, value):
        # 對字段類型做檢測
        if not isinstance(value, self.type_):
            raise TypeError('expected an %s' % self.type_)
        instance.__dict__[self.name] = value
    def __delete__(self, instance):
        del instance.__dict__[self.name]
class Person(object):
    # 定義一個name字段,申請描述符實例
    name = Attr('name', str)
    age = Attr('age', int)
    height = Attr('height', float)
p = Person()
p.name = 'Bob'
print(p.name)
# age賦值字符串類型拋出異常錯誤
# p.age = '17'

到此這篇關(guān)于Python使用描述符實現(xiàn)屬性類型檢查的文章就介紹到這了,更多相關(guān)python屬性類型檢查內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • PyCharm MySQL可視化Database配置過程圖解

    PyCharm MySQL可視化Database配置過程圖解

    這篇文章主要介紹了PyCharm MySQL可視化Database配置過程圖解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • ?python用matplotlib可視化繪圖詳解

    ?python用matplotlib可視化繪圖詳解

    這篇文章主要介紹了?python用matplotlib可視化繪圖詳解,Matplotlib?是一個python的?2D繪圖庫,它以各種硬拷貝格式和跨平臺的交互式環(huán)境生成出版質(zhì)量級別的圖形,下面我們就來看看關(guān)于matplotlib可視化繪圖的詳細(xì)過程吧
    2022-01-01
  • 使用sklearn對多分類的每個類別進(jìn)行指標(biāo)評價操作

    使用sklearn對多分類的每個類別進(jìn)行指標(biāo)評價操作

    這篇文章主要介紹了使用sklearn對多分類的每個類別進(jìn)行指標(biāo)評價操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • python同步兩個文件夾下的內(nèi)容

    python同步兩個文件夾下的內(nèi)容

    這篇文章主要為大家詳細(xì)介紹了python同步兩個文件夾下的內(nèi)容,包括子文件夾,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • 深入淺出分析Python裝飾器用法

    深入淺出分析Python裝飾器用法

    這篇文章主要介紹了Python裝飾器用法,結(jié)合實例形式對比分析了Python裝飾器的定義與使用技巧,需要的朋友可以參考下
    2017-07-07
  • pygame實現(xiàn)飛機大戰(zhàn)

    pygame實現(xiàn)飛機大戰(zhàn)

    這篇文章主要為大家詳細(xì)介紹了pygame實現(xiàn)飛機大戰(zhàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • 使用Python Pandas處理億級數(shù)據(jù)的方法

    使用Python Pandas處理億級數(shù)據(jù)的方法

    這篇文章主要介紹了使用Python Pandas處理億級數(shù)據(jù)的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-06-06
  • Python如何執(zhí)行系統(tǒng)命令

    Python如何執(zhí)行系統(tǒng)命令

    這篇文章主要介紹了Python如何執(zhí)行系統(tǒng)命令,幫助大家更好的利用python操作系統(tǒng),感興趣的朋友可以了解下
    2020-09-09
  • Python 中的 copy()和deepcopy()

    Python 中的 copy()和deepcopy()

    這篇文章主要介紹了Python 中的 copy()和deepcopy(),下面詳細(xì)介紹該內(nèi)容并附上詳細(xì)代碼,需要的朋友可以參考一下文章的具體內(nèi)容,希望對你有所幫助
    2021-11-11
  • python opencv實現(xiàn)目標(biāo)區(qū)域裁剪功能

    python opencv實現(xiàn)目標(biāo)區(qū)域裁剪功能

    這篇文章主要介紹了python opencv實現(xiàn)目標(biāo)區(qū)域裁剪功能,通過截取到坐標(biāo)信息以后用CV2的裁剪就可以完美實現(xiàn),本文給大家分享實例代碼,需要的朋友可以參考下
    2021-07-07

最新評論

龙江县| 芦溪县| 新宁县| 海安县| 英吉沙县| 克拉玛依市| 石泉县| 汝州市| 庆安县| 上犹县| 汝南县| 烟台市| 邻水| 安康市| 雅安市| 和平县| 六枝特区| 天全县| 齐齐哈尔市| 岗巴县| 安丘市| 平乐县| 平乡县| 安康市| 筠连县| 巴南区| 肇源县| 淳化县| 稻城县| 呼伦贝尔市| 德昌县| 贡嘎县| 汝州市| 武穴市| 平阴县| 克拉玛依市| 建平县| 盐山县| 太仆寺旗| 包头市| 保山市|