Python的__getattr__和__setattr__方法,屬性私有化
__getattr__方法:
攔截點號運算。物件.屬性:如果找不到屬性,就會用屬性名作為字串,呼叫該方法;如果繼承樹可以找到該屬性,則不會呼叫該方法
這裡empty類和例項x並沒有屬性age,所以執行x.age時,就會呼叫__getattr__方法,對於name也是同樣。
__setattr__方法: 會攔截所有屬性的的賦值語句。如果定義了這個方法,self.arrt = value 就會變成self.__setattr__("attr", value).
這個需要注意。當在__setattr__方法內對屬性進行賦值是,不可使用self.attr = value,因為他會再次呼叫self.__setattr__("attr", value),則會形成無窮遞迴迴圈,最後導致堆疊溢位異常。應該通過對屬性字典做索引運算來賦值任何例項屬性,也就是使用self.__dict__['name'] = value.
實現屬性的私有化 上述方式是python實現屬性私有化的首選方式。
相關推薦
Python的__getattr__和__setattr__方法,屬性私有化
__getattr__方法: 攔截點號運算。物件.屬性:如果找不到屬性,就會用屬性名作為字串,呼叫該方法;如果繼承樹可以找到該屬性,則不會呼叫該方法 這裡empty類和例項x並沒有屬性age,所以執行x.age時,就會呼叫__getattr__方法,對於name也
python __getattr__ 和 __setattr__方法、屬性私有化
Python setattr() 函式 描述語法 setattr 函式對應函式 getatt(),用於設定屬性值,該屬性必須存在。 setattr 語法: setattr(object, name, value) 引數 object -- 物件。 name -
潭州課堂25班:Ph201805201 第十一課 繼承,多繼承和魔術方法,屬性和方法 (課堂筆記)
筆記 父類 當前 TE -s __del__ color true ont 繼承: class p : cls_name = ‘p‘ def __init__(self): print(‘正在實例化‘) def __del__(se
靜態方法,類方法,屬性,setter用法,delete用法和屬性方法的應用場景
一、靜態方法 1.1、定義 在類中的方法前面通過@staticmethod裝飾器即可把其裝飾的方法變為一個靜態方法 1 2 3 4 5 6 7 8 9 10 class Person(object): &
面向物件-類屬性和類方法,靜態方法
類屬性和類方法 目標 類的結構 類屬性和例項屬性 類方法和靜態方法 01. 類的結構 1.1 術語 —— 例項 使用面相物件開發,第 1 步 是設計 類 使用 類名() 建立物件,建立物件 的動作
Java中子類是否可以繼承父類的static變數和static方法,以及父類的private屬性和private方法
轉載自以下原文: 原文連結1 原文連結2 一、子類可以繼承父類的private屬性和private方法: 1、子類繼承父類,子類擁有了父類的所有屬性和方法。 程式驗證,父類的私有屬性和方法子類是無法直接訪問的。當然私有屬性可以通過public修飾的
靜態方法,類方法,屬性方法
ack posit elf none pre name n) nal last 1.靜態方法:只是名義上歸類管理,實際上在靜態方法裏訪問不了類或實例中的任何屬性。相當於類的工具包。 class Dog(object): def __init__(self,name
Shell腳本(腳本結構和執行方法,date命令用法,腳本中的變量)
cal 方式 spa 12月 自動化 復制 自定義函數 soft 變量 Shell是什麽Shell是一種腳本語言,和傳統語言C,Python...相比還是比較簡單的。可以使用邏輯判斷,循環等語法可以自定義函數shell是系統命令的集合shell腳本可以實現自動化運維,能大大
springMVC正確使用GET POST PUT和DELETE方法,如何傳遞參數
組裝 on() sha 直接 一個 rtt gets 參數 refresh 1. 向服務器請求數據:GET 這是標準的http的GET最擅長的, 應該使用GET請求,但是在使用時候我們會需要傳遞一個或多個參數給服務器, 這些出參數可能是基本數據類型頁可能是
django 一對多的添加記錄create 和save 方法,update 更新和save()方法的區別,查詢API的方法
bubuko 只有一個 pan 單獨 mode dig 萬能 .... .site 轉發之https://www.cnblogs.com/gyh04541/p/7910004.html 查詢api的方法: 表.objects.all() ---[obj1,obj2,..
python3學習筆記 靜態方法,類方法,屬性方法
SM clas ssm inf pytho ID 靜態方法 delet 分享 靜態方法@statitmetod 只是名義上歸類管理,實際上在靜態方法裏訪問不了類或實例中的任何屬性 類方法@classmethed 只能訪問類變量,不能訪問實例變量 屬性方法@prope
python __getattr__ 和 __setattr__方法
1、__getattr__ 攔截點號運算。當對未定義的屬性名稱和例項進行點號運算時,就會用屬性名作為字串呼叫這個方法。如果繼承樹可以找到該屬性,則不呼叫此方法 例:當調x.age的時候,不會走到__getattr__ 方法。調x.name的時候(此時demo的__init__方法
十、C#入門基礎10(密封類和密封方法,異常)
一、密封類 密封類可以用來限制擴充套件性,如果密封了某個類,則其他類不能從 該類繼承。 如果密封了某個成員,則派生類不能重寫該成員的實現。 預設情況下,不應該密封類和成員。 密封可以防止對庫的型別和成員進行自定義。 C#中使用密封類時,如果類滿足以下條件,則應將其密封: 1.靜
原生Ajax使用筆記---get和post方法,url傳參
AJAX是Asynchronous Javascript And XML(非同步JavaScript和XML)的縮寫,用於建立快速動態網頁的技術。AJAX的核心物件是XMLHttpRequest ,在每個瀏覽器中都有。 原生Ajax的使用步驟: 建立一個核心物件XMLHttpReque
python __getattr__ 和 __setattr__方法
1、__getattr__ 攔截點號運算。當對未定義的屬性名稱和例項進行點號運算時,就會用屬性名作為字串呼叫這個方法。如果繼承樹可以找到該屬性,則不呼叫此方法 例:當調x.age的時候,不會走到__getattr__ 方法。調x.name的時候(此時demo的__ini
全面瞭解python中的類,物件,方法,屬性
python中一切皆為物件,所謂物件:我自己就是一個物件,我玩的電腦就是物件,坐著的椅子就是物件,家裡養的小狗也是一個物件。。。。。。 我們通過描述屬性(特徵)和行為來描述一個物件的。比如家裡的小狗,它的顏色,大小,年齡,體重等是它的屬性或特徵。它會汪汪叫,會搖
Java關於面向物件,方法,屬性的小例子
package p1; public class TestDog{ public static void main(String[] args){ //建立物件,基於類名 Dog dog = new Dog(); //
php類中為什麼設定set和get方法操作屬性
php程式規範中會建議大家儘量將類中的屬性私有化,即定義為private變數,通過設定set和get函式來對屬性進行操作。一些人存在這樣的疑問,為什麼不直接將屬性設定為public,以後呼叫屬性時直接通過物件進行訪問不是更方便? 當然php中這樣做有它的原因: 1 將資
java類中為什麼設定set 和get 方法操作屬性
樣例一: class person { public String name ; public String sex ; } 如上這麼一個類我們可以對它的實體進行: 起名操作,如 person1.name = "小明"; 取名操作
docker中安裝redis和zookeeper方法,親測可用(單機版)
比較好用的映象地址: docker pull daocloud.io/daocloud/zookeeper:3.4.10 安裝redis: ①通過pull命令下載映象,映象地址可以使用上面的 ②docker啟動redis映象容器,使用以下命令,親測好用 docker run