1. 程式人生 > >Python語言學習講解十四:python之用純屬性取代get和set方法

Python語言學習講解十四:python之用純屬性取代get和set方法

注:每週一到週五都會進行相關Python基礎知識更新,歡迎大家提寶貴的意見

一、從其他語言轉入python的開發者,一般可能在設計類的時候,在其中填寫get和set方法,用來獲取和設定類的成員屬性。

eg:

class A(object):

def get_a(self):

return self.a

def set_a(self,sum):

self.a = sum

這種setter 和 getter方法用起來很簡單,但是不是python語言的標準寫法。

對於python學習者來說,應該先從public屬性寫起。我們可以使用@property修飾器和setter方法來做

class B(object):

def __init__(self):

self._om = 1

@property######屬性的get方法

def om(self):

return self_om

@property.setter#######屬性的set方法

def om(self, t_om):

if t_om<= 0:

raise ValueError("%ft_om must be > 0" % t_om)

self._om = t_om

此時呼叫的話就可以直接使用屬性名字了。說白了就是換一種寫法而已,其實沒有啥特別的。也可以使用@property來防止父類的屬性遭到修改。

注意:@property的最大缺點在於:和屬性相關的方法,只能在子類中共享,而與之無關的其他類,則無法複用同一份實現程式碼。不過python也提供了描述符機制,開發者可以通過它來複用與屬性有關的邏輯。

總結:

1、編寫新類的時候,應該用簡單的public屬性來定義其介面,二不要手工實現set和get方法

2、如果訪問物件的某個屬性時,需要表現出特殊的行為,那就用@property來定義這種行為

3、@property方法應該遵循最小驚訝原則,從而不產生奇怪的副作用

4、@property方法需要執行的迅速一些,緩慢或者複雜的工作,應該放在普通的方法裡面。

相關推薦

Python語言學習講解python屬性取代getset方法

注:每週一到週五都會進行相關Python基礎知識更新,歡迎大家提寶貴的意見 一、從其他語言轉入python的開發者,一般可能在設計類的時候,在其中填寫get和set方法,用來獲取和設定類的成員屬性。

Python語言學習講解python描述符__set____get__ 等解釋

注:每週一到週五都會進行相關Python基礎知識更新,歡迎大家提寶貴的意見 一、方法: 首先說下python中存在的幾種方法:物件方法、靜態方法、類方法等,歸屬權分別為obj、cls、cls 其實可以從他們的引數中就可以看的出來 物件方法引數中含有self,這個

C#封裝關於欄位屬性getset方法的小總結

----以下only個人學習完C#與JAVA時對屬性中set 和 get方法的一些個人總結,如有誤導或者不足之處,還請各位在評論區連嘲帶諷的指出(不然咱沒進步的空間啊T _ T)------前提須知: 只有get方法叫只讀屬性,只有set方法叫只寫屬性,兩個方法都存在叫可讀

Python語言學習講解型別判斷type與isinstance的區別

注:每週一到週五都會進行相關python基礎知識更新,歡迎大家提寶貴的意見 type和isinstance共同點:用於驗證引數型別 在遊戲專案中,我們會在每個介面驗證客戶端傳過來的引數型別,如果驗證不通過,返回給客戶端“引數錯誤”錯誤碼。 這樣做不但便於除錯,而且

Python 語言學習 第三篇陣列型別(列表、字典元組)

列表和欄位都可以在原處進行修改,可以按照需求增長或縮短,並且可以包含任何型別的物件或被巢狀。列表和字典儲存的是物件的引用,而不是拷貝。 一,列表 列表是有序的序列,每一個列表項的順序是固定的,這使得列表可以通過指定的偏移來索引和分片。列表是可變的序列,支援在原處修改。 列表項可以是任何型別,或物件,也可

Python 語言學習 第六篇迭代解析

Python 語言學習 第六篇:迭代和解析 Python中的迭代是指按照元素的順序逐個呼叫的過程,迭代概念包括:迭代協議、可迭代物件和迭代器三個概念。 迭代協議是指有__next__()函式的物件會前進到下一個結果,而到達系列的末尾時,則會引發StopIteration異常。為了支援迭代協議

Python 語言學習 第七篇函式1(定義、呼叫變數的作用域)

函式是把一些語句集合在一起的程式結構,用於把複雜的流程細分成不同的元件,能夠減少程式碼的冗餘、程式碼的複用和修改程式碼的代價。 函式可以0個、1個或多個引數,向函式傳遞引數,可以控制函式的流程。函式還可以返回程式碼執行的結果,從技術上講,任何函式都要返回結果,一個沒有返回值的函式會自動返回none物件。如果

Python 語言學習 第八篇函式2(引數、lamdba函式屬性

函式的引數是引數暴露給外部的介面,向函式傳遞引數,可以控制函式的流程,函式可以0個、1個或多個引數;在Python中向函式傳參,使用的是賦值方式。 一,傳遞引數 引數是通過賦值來傳遞的,傳遞引數的特點是: 引數的傳遞是通過自動把物件賦值給函式的本地變數名來實現的, 在函式內部的變數名的賦值不會

Python視訊學習、Redis)

目錄 0. Redis基本介紹 Redis簡介 Redis特性: Redis 優勢 Redis應用場景 1. 安裝和配置 1.1 下載安裝Redis 遇到的問題

Python 語言學習 第九篇模組

模組是把程式程式碼和資料封裝的Python檔案,也就是說,每一個以副檔名py結尾的Python原始碼檔案都是一個模組。每一個模組檔案就是一個獨立的名稱空間,用於封裝頂層變數名;在一個模組檔案的頂層定義的所有的變數名(函式名也是一個變數名),稱作模組的屬性。匯入模組給予了對模組的全域性作用域中的變數名的讀取權,

python cookbook學習筆記物件(1)

我們經常會對列印一個物件來得到物件的某些資訊。 class pair:     def __init__(self,x,y):         self.x=x         self.y=y if __name__=='__main__':     p=pair

Python學習)---- 實現簡單的HTTP伺服器

用Python實現簡單的HTTP伺服器 用於搭建http server的模組有如下三種: 1)BaseHTTPServer:提供基本的Web服務和處理器類,分別是HTTPServer及BaseHTTPRequestHandler; 2)SimpleHTTPServer:包含

odoo10學習筆記mixin其他功能模塊

idg 其他 www 有用 read http 消息系統 pan div 原文地址:http://www.cnblogs.com/ygj0930/p/7153680.html odoo提供了許多有用的功能,比如:討論、通知、網站等。我們可以在開發自己的模塊時,引入這些功能。

Go語言學習筆記 切片(slice)

操作 容量 方括號 一個 組類型 學習 中學 slice 修改 Go語言學習筆記十一: 切片(slice) 切片這個概念我是從python語言中學到的,當時感覺這個東西真的比較好用。不像java語言寫起來就比較繁瑣。不過我覺得未來java語法也會支持的。 定義切片 切片可以

Python基礎教程筆記Python Number(數字)

顯示 sta ron nbsp num 下一個 組成 有效 位數 Python 支持四種不同的數值類型: 整型(Int) - 通常被稱為是整型或整數,是正或負整數,不帶小數點。 長整型(long integers) - 無限大小的整數,整數最後是一個大寫或小寫的L。

C++語言學習)——C++類成員函數調分析

不可訪問 ring error: 兩種 cout list 空間 splay 示例代碼 C++語言學習(十四)——C++類成員函數調用分析 一、C++成員函數 1、C++成員函數的編譯 C++中的函數在編譯時會根據命名空間、類、參數簽名等信息進行重新命名,形成新的函數名。函

GO語言學習)Go 語言數組

brush 多維數組 type 本質 數據結構 com 循環 方式 整型 Go 語言數組 Go 語言提供了數組類型的數據結構。 數組是具有相同唯一類型的一組已編號且長度固定的數據項序列,這種類型可以是任意的原始類型例如整形、字符串或者自定義類型。 相對於去聲明numb

python3語言學習筆記(迭代器與生成器)

迭代器(iterator)------一種物件 迭代是Python最強大的功能之一,是訪問集合元素的一種方式。 迭代器是一個可以記住遍歷的位置的物件。 迭代器物件從集合的第一個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。 迭代器有兩個基本的方法:iter() 和

Python自動化學習筆記()——Python資料型別(集合set,元組tuple)、修改檔案、函式、random常用方法

1.修改檔案的兩種方式 1 #第一種 2 with open('users','a+') as fw: #用a+模式開啟檔案,使用with這種語法可以防止忘記close檔案 3 fw.seek(0) #移動檔案指標到最前面,然後才能讀到內容 4 result=fw.read()

OpenCV學習watershed 分水嶺演算法

1. watershed  void watershed( InputArray image, InputOutputArray markers ); 第一個引數 image,必須是一個8bit 3通道彩色影象矩陣序列,第一個引數沒什麼要說的。 關鍵是第二個引數 mar