1. 程式人生 > >python 描述符類

python 描述符類

概述

描述符類是Python中一種用於儲存類屬性值的物件

構成

根據定義,描述符類通常需要以下幾種魔術方法:

  • __set__(self, instance, value)
  • __get__(self, instance, owner)
  • __delete__(self, instance)
  • __set_name__(self, owner, name)

__set__函式

__set__函式用於設定屬性的值,值可以設定在描述符例項中,也可以設定在使用描述符例項的類例項中。其引數如下:

引數 意義
self 描述符例項
insntance 類例項物件
value 待設定的值

__get__函式

__get__函式用於獲取屬性的值。引數如下:

引數 意義
self 描述符例項
instance 類物件例項
owner 類物件

__delete__函式

__delete__函式用於刪除已設定的屬性,引數如下:

引數 意義
self 描述符例項
instance 類物件例項

__set_name__函式

__set_name__函式用於控制描述符物件繫結的類屬性的名字。引數如下:

引數 意義
self 描述符例項
owner 類物件
name 屬性名

示例

  • 屬性值儲存在描述符中
#!/usr/bin/env python3
# encoding: utf-8


class Grade:

    def __set__(self, instance, value):
        self.value = value

    def __get__(self, instance, owner):
        return self.value


class Exam:
    math_grade = Grade
() import pdb;pdb.set_trace() exam = Exam() exam.math_grade = 40 exam.math_grade -> exam.math_grade = 40 (Pdb) s --Call-- -> def __set__(self, instance, value): (Pdb) args self = <__main__.Grade object at 0x7f9749370a58> instance = <__main__.Exam object at 0x7f9749383f98> value = 40 ... ... (Pdb) exam.__dict__ {} -> exam.math_grade (Pdb) s --Call-- -> def __get__(self, instance, owner): (Pdb) args self = <__main__.Grade object at 0x7f87c1827a58> instance = <__main__.Exam object at 0x7f87c1827b70> owner = <class '__main__.Exam'>
  • 屬性值儲存在類例項中
#!/usr/bin/env python3
# encoding: utf-8


class Grade:

    def __set__(self, instance, value):
        instance.value = value

    def __get__(self, instance, owner):
        return instance.value


class Exam:
    math_grade = Grade()


import pdb;pdb.set_trace()
exam = Exam()
exam.math_grade = 40
exam.math_grade

(Pdb) exam.__dict__
{'value': 40}

相關推薦

python 描述

概述 描述符類是Python中一種用於儲存類屬性值的物件 構成 根據定義,描述符類通常需要以下幾種魔術方法: __set__(self, instance, value) __get__(self, instance, owner) __delet

python 描述 上下文管理協議 裝飾器 property metaclass

get stat www. 類方法 aaa 部分 函數裝飾器 delete elf 1.描述符 #!/usr/bin/python env # coding=utf-8 # 數據描述符__get__ __set__ __delete__ ‘‘‘ 描述符總結

Iterator Protocol - Python 描述協議

var 列表 下一個 可叠代對象 data xib 通過 stop comm 1 Iterator Protocol - Python 描述符協議 2 3 先看幾個有關概念, 4 iterator 叠代器, 5 一個實現了無參

python

python1.整型(Int)  Int,整數,範圍為 -2 ** 31 到 2 ** 31 - 1 ,超出這個範圍便是長整型,有2進制,8進制,10進制,16進制。用8進制表示整數時,前面要加‘0‘的前綴,16進制的前綴為‘0x‘2.長整型(Long)Long,整數,超出範圍為為 -2 ** 31 到 2

python

info pac 默認 disjoint 默認值 put format extend python2 數字類型: 復數: x=1+2j #1為實數,2j為虛數 print(x.real) print(x.imag) 可變:值變,id不變,可變==不可hash 不可變:值變

Python描述 (descriptor) 詳解

完成 objects 圖片 問題: tool 事先 自動 bsp 什麽 1、什麽是描述符?   python描述符是一個“綁定行為”的對象屬性,在描述符協議中,它可以通過方法重寫屬性的訪問。這些方法有 __get__(), __set__(), 和__delete__()

python——描述

__name__ intersect for in 問題 那是 exceptio section elf per 本文主要介紹描述符的定義,個人的一些理解;什麽是數據描述符;什麽是非數據描述符;描述符的檢測等。希望看完這篇文章後,你對描述符有了更清晰的認識。知道怎麽判斷一個

python描述詳解

1描述符: 描述符是指將某種特殊型別的類的例項支配給另外一個類的屬性。 對於特殊型別必須實現以下三個方法中至少一個方法:    def __get__(self,instance,owner): -用於訪問屬性,它返回屬性的值   def __set__(self,in

Python描述深入理解

Python的描述符乍眼看去簡單,但是細節方面如果不注意容易掉坑,總結以下幾個坑,以作備忘,先看程式碼: class D: def __get__(self, inst, owner): if inst is None: return self

python描述

cal odin 固定 let 訪問 類名 self attr fault -- coding=utf-8 -- class NonNeg:def init(self,default=0):self.default = defaultpassdef get(self,ins

Python描述(descriptor)詳解及應用場景

Python中包含了許多內建的語言特性,它們使得程式碼簡潔且易於理解。這些特性包括列表/集合/字典推導式,屬性(property)、以及裝飾器(decorator)。對於大部分特性來說,這些“中級”的語言特性有著完善的文件,並且易於學習。 但是這裡有個例外,那就是描

Python描述(__get__,__set__,__delete__)簡介

for 原因 python 原理 none 對象屬性 描述符 簡介 訪問 先說定義,這裏直接翻譯官方英文文檔:   一般來說,描述符是具有“綁定行為”的對象屬性,該對象的屬性訪問將會被描述符協議中的方法覆蓋.這些方法是__get__(),__set

python-字常用函數

後綴 *** ron abs tar 整數 字符串拼接 十六 空格 1.字符串運算符 a="hello"  b="world"  c="hello world" +     將兩個字符串拼接,例子:a+b="helloword" *    重復輸出字符,例子:a="h

python - 裝飾器+描述(給添加屬性且屬性型審核)

spa 實現 Owner 類添加屬性 print self student value instance 裝飾器+描述符 實現給一個類添加屬性且對添加的時,對屬性進行類型審核: def zsq(**kwargs): def fun(obj): fo

python 學習彙總61:class-描述(初級學習- tcy)

描述符 2018/8/9 -------------------------------------------------------------------------- 1.描述符就是一個代表屬性值的物件。 # 描述符只能在類級別上進行例項化。 # 不能通過在__init_

python元編程之實現定制--使用描述,__slots__,__new__篇

命名 pro failed htm rom 邏輯 lec 計數 for 問題:實現一個類,要求行為如同namedtuple:只存在給定名稱的屬性,不允許動態添加實例屬性。 主要知識點在於: __slots__、描述符及property、__new__的使用 代碼如下:

python超程式設計之實現定製--使用描述,__slots__,__new__篇

問題:實現一個類,要求行為如同namedtuple:只存在給定名稱的屬性,不允許動態新增例項屬性。 主要知識點在於: __slots__、描述符及property、__new__的使用 程式碼如下: 1 """ 2 執行環境 3 python 3.7+ 4 """ 5 from coll

python學習筆記6.5-描述的使用

描述符(Descriptor)就是以特殊方法get(), set(), delete()的形式實現了三個核心的屬性訪問操作(set,get,delete)的類。這些方法接受類例項作為輸入來工作。之後,底層的例項字典會根據需要適當的進行調整。 要使用一個描述符,

python與對象-如何使用描述對實例屬性做型檢查

sin del pass 類型檢查 使用 問題 typeerror tom 添加 如何使用描述符對實例屬性做類型檢查 問題舉例 在某些項目中,我們實現一些類,並希望能像靜態類型語言那樣對它們的 實例屬性做類型檢查:   p = Persosn()   p.name

python數據型-字串常用操作

字典 開始 san isa center abcdefg 強制類型轉換 內存地址 mes 這次主要介紹字符串常用操作方法及例子 1.python字符串 在python中聲明一個字符串,通常有三種方法:在它的兩邊加上單引號、雙引號或者三引號,如下: name = ‘he