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