1. 程式人生 > >python 7-6 如何使用描述符對例項屬性做型別檢查,分別實現set,方法,在set內使用isinstance做型別檢查

python 7-6 如何使用描述符對例項屬性做型別檢查,分別實現set,方法,在set內使用isinstance做型別檢查

python 7-6 如何使用描述符對例項屬性做型別檢查

解決方案

使用描述符來實現需要型別檢查的屬性:
分別實現get,set,__delete方法
set內使用isinstance函式做型別檢查

由於python是弱型別語言,變數可以指向任意的物件,我們可以給變數加上型別限制


class Attr(object):
    def __init__(self,name,type_):
        self.name = name
        self.type_ = type_
    def __get__(self,instance,cls):
        print
'in__get__',instance,cls return instance.__dict__[self.name] def __set__(self,instance,value): print 'in __set__' if not isinstance(value,self.type_): raise TypeError("expected is %s"%(self.type_)) instance.__dict__[self.name] = value def __delete__
(self,instance):
print 'in __del__' del instance.__dict__[self.name] class Person(object): name = Attr('name',str) age = Attr('age',int) height = Attr('height',float) p=Person() p.name='bob' p.name=12

相關推薦

python 7-6 如何使用描述例項屬性型別檢查,分別實現set,方法,在set使用isinstance型別檢查

python 7-6 如何使用描述符對例項屬性做型別檢查 解決方案 使用描述符來實現需要型別檢查的屬性: 分別實現get,set,__delete方法 在set內使用isinstance函式做

零基礎學python-7.6串格式化表達式

his 一個 中間 rac integer color ack 文件夾 get 字符串格式化同意在一個單個的步驟中對一個字符串運行多個特定類型的替換 特別是給用戶提示的時候,格式化很方便 實現方法: 1.格式化表達式,類似於c語音的printf 在表達式中,我們使用%二

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

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

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

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

Python基礎6-2 面向象編程

python 面向對象 本篇將詳細介紹Python 類的成員、成員修飾符、類的特殊成員。類的成員類的成員可以分為三大類:字段、方法和屬性註:所有成員中,只有普通字段的內容保存對象中,即:根據此類創建了多少對象,在內存中就有多少個普通字段。而其他的成員,則都是保存在類中,即:無論對象的多少,在內存中只

Python基礎6-1 面向象編程

python 面向對象 概述面向過程:根據業務邏輯從上到下寫壘代碼函數式:將某功能代碼封裝到函數中,日後便無需重復編寫,僅調用函數即可面向對象:對函數進行分類和封裝,讓開發“更快更好更強...”面向過程編程最易被初學者接受,其往往用一長段代碼來實現指定功能,開發過程中最常見的操作就是粘貼復制,即:將之

python遍歷並獲取屬性--dir(),__dict__,getattr,setattr

() 函數名 基本上 pri col 方法名 方法 函數對象 獲取對象 一、遍歷對象的屬性: 1.dir(obj) :返回對象的所以屬性名稱字符串列表(包括屬性和方法)。 for attr in dir(obj): print(attr) 2.obj.__dict_

零基礎學python-7.2 字串常量

text click 32位 edi data 謝謝 進制 互換 view 1.單雙引號字符串是一樣的 >>> 'abc'

python學習筆記8--面向象--屬性方法詳解

confirm 報錯 方式 系列 dep 是個 應用 all icm 屬性:   公有屬性 (屬於類,每個類一份)   普通屬性 (屬於對象,每個對象一份)   私有屬性 (屬於對象,跟普通屬性相似,只是不能通過對象直接訪問) 方法:(按作用)   構造方法  

Python進階-----描述(__get__(),__set__(),__delete__())

一、描述符是什麼   描述符本質就是一個新式類,在這個新式類中,至少實現了__get__(),__set__(),__delete__()中的一個,這也被稱為描述符協議   __get__():呼叫一個屬性時,觸發   __set__():為一個屬性賦值時,觸發   __delete__():採用del刪除屬

Python學習:描述

一、描述符是什麼   描述符:是一個類,只要內部定義了方法__get__, __set__, __delete__中的一個或者多個。描述符,屬性,方法繫結等內部機制都是描述符在起作用。描述符以單個屬性出現,並針對該屬性的不同訪問行為做出響應。最重要的是,描述符能“感知”通過什麼引用該屬性,從而和目標建立繫結

自學Python day6--------面向物件程式設計(例項屬性和類屬性

因為Python是動態語言,可以根據例項任意繫結屬性,如: class Student(object): def __init__(self, name): self.name = name s = Student('Bob') s.

python基礎6 運算

結果 基礎 布爾值 erro 布爾 pri 運算符 運算 als 1、運算符   + - * / ** % //   判斷某個東西是否在某個東西裏面包含 in not in 結果就是布爾值。 如

ORA-12505: TNS: 監聽程序當前無法識別連接描述中所給出的SID等錯誤解決方法

RR script 監聽 修改 查詢 listen 註冊 其他 esc 程序連接orarle報ORA-12505錯誤 一、異常{ ORA-12505, TNS:listener does not currently know of SID given in connect

python 操作 set 方法 —— set.issubset()

set.issubset(other) set <= other Test whether every element in the set is in other. set < ot

(一)Python入門-6面向象編程:10特殊方法和運算重載-特殊屬性

__str__ code 編程 init 類對象 ima clas str ase 一:特殊方法和運算符重載   Python的運算符實際上是通過調用對象的特殊方法實現的。比如: #運算符-特殊方法 a = 20 b = 30 c = a + b d = a

JavaScript中的描述(屬性特性)

http rabl catch defined tor pro 其他 mas art   我們先創建一個對象: var person = {   name: "Nicholas",   _job: "Software Engineer",   sayName: funct

7.1.6 DOM屬性操作

move ons console tel doc get att ole elements prop() removeProp() $(function(){   //js對input單選按鈕checked的默認設置   //console.log($(‘input[

python屬性訪問順序 --描述、__getattr__()

在Python中,訪問一個屬性的優先順序順序按照如下順序: 1、_getattribute_() 2.類屬性 3.資料描述符 4.例項屬性 5.非資料描述符 6.__getattr__()方法 需要注意的是:類屬性和例項屬性屬於不同的屬性集,因此這裡類屬性排序並不嚴謹。 首先來說

python屬性描述屬性查詢規則

描述符 import numbers class IntgerField: def __get__(self, isinstance, owner): print('獲取age') return self.num def __set__(self,