python面向對象魔術方法

python面向對象魔術方法

創建:__init__
銷毀:__del__

哈希:__hash__
當__hash__ =None時,該類的實例不可哈希
hash值相同不能確定2個對象相同,要__eq__來判斷是否相同。

波爾:__bool__,返回的類型為bool,如果沒有定義__bool__,看__len__的返回長度,非0為真,如果__len__也沒定義,所有實例都返回真。
可視化:__repr__,__str__
若只定以一種,定義__repr__

運算符重載:
<:__lt__、<=:__le__、==:__eq__、>:__gt__、>=:__ge__、!=:__ne__
+:__add__、-:__sub__、*:__mul__、/:__truediv__、%:__mod__、//:__floordiv__、**:__pow__

容器方法:
__iter__:返回一個新的迭代器對象
__getitem__:實現self[key]訪問,key不存在引發異常
__setitem__:和__getitem__類似,設置值的方法
__missing__:dict使用__getitem__()調用時,key不存在不報錯,執行該方法

可調用對象:
__call__:類中定義了該方法,實例可以像函數一樣調用
類中定義了__call__,可以實現把類變成類裝飾器

上下文管理:
__enter__和__exit__都定義
__enter__的返回值會變成with語法中的變量(f)
使用 with class() as f:pass調用上下文方法。
定義了上下文管理的類,with語法可以開啟一個上下文環境,執行前做一些工作,執行后也做一些工作??梢园哑洚敵梢粋€類裝飾器。

反射:
一個對象在運行時可以找出其類型的信息。
具有反射能力的函數:type(),isinstance(),callable(),dir(),getatter()等。
內建函數:
getattr(object,name,default):通過name返回object的屬性值,當屬性不存在時,返回default,如果沒有default,則拋出AttributeError。name必須為字符串
setattr(object,name,value):object的屬性存在,則覆蓋,不存在,新增
hasattr(object,name):判斷對象是否有這個name的屬性
反射相關的魔術方法:
__getattr__():一個類的屬相會按照繼承關系找,如果找不到,就會執行__getattr__方法,如果沒有這個方法,就會拋出AttriuteError
__setattr__():可以阻止通過實例增加、修改屬性的操作。實例通過點設置屬性,如self.x=x,就會調用__setattr__(),而不會直接加到其__dict__中,屬性要加到實例的__dict__中,需要自己完成
__delattr__():可以阻止通過實例刪除屬性的操作
__getattriute__():可以阻止通過實例查找屬性的操作,實例的所有屬性訪問,都會先調用__getattriute__方法

描述器:
用到了三個魔術方法:__get__(),__set__(),__delete__()
一個類含有__get__(),__set__(),__delete__()三個方法中的任意一個,這個類就是描述器
如果僅實現了__get__(),就是非數據描述器
同時實現了__get__()和__set__()就是數據描述器
**如果一個類的類屬性是一個描述器的實例,訪問這個類屬性就會調用__get__方法**
owner就是這個類
**如果描述器是非數據描述器,這個owner的實例的字典優先級高于描述器,如果描述器是數據描述器,這個owner的實例的字典優先級低于于描述器**

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/88721

(0)
10590628461059062846
上一篇 2017-11-20
下一篇 2017-11-20

相關推薦

  • 用戶管理相關

    安全3A:     資源分配:       authentication:認證       authorization 授權       accouting|audition 審計 用戶分為(centos7):   管理員:root 0 &…

    Linux干貨 2017-02-25
  • 優云APM最佳實踐: 診斷平安城市視頻網性能問題

    前言: 平安城市已經是一個關系你我他的民生工程,但由于本身系統的復雜性,給運維工作帶來了極大的挑戰。如何保障攝像頭在線率?如何在系統中找到視頻系統故障的問題所在?在我們某一次項目經歷中,優云APM在發現問題,定位故障等方面,起了很大作用,幫助我們順利的定位到了系統的故障所在。 平安城市是一個特大型、綜合性非常強的管理系統,不僅需要滿足治安管理、城市管理、交通…

    Linux干貨 2016-08-05
  • 馬哥linux0726課程內容

    課堂內容筆記   使用幾個符號可以使用原始命令 \,’’,絕對路徑運行 這三種方法都可以使用到原始命令,不使用別名   別名-內部命令-緩存-外部命令 使用命令的優先級   man幫助具體用法 makewhatis老版本安裝whatis mandb新版本安裝whatis man的具體路徑在/usr/share/man whati…

    Linux干貨 2016-08-04
  • 馬哥教育網絡班21期+第8周課程練習

    1、請描述網橋、集線器、二層交換機、三層交換機、路由器的功能、使用場景與區別。 集線器(HUB)是在OSI模型的第一層——物理層——連接多臺主機、延長網絡的設備。其主要功能是將從一個端口接收到的數據包轉發給所有端口。中繼器(Repeater)是將由電纜傳過來的電信號或光信號調整波形和放大再傳給另一個電纜的設備,提供多端口服務的中繼器稱作集線器。二者的主要區別…

    Linux干貨 2016-09-05
  • 馬哥linux0803作業內容

    1. 創建sysadmins組 將用戶user1,user2,user3加入sysadmins組中 將user3設置為sysadmins的管理員 用user3登錄,將user2從組中移除 設置sysadmins的密碼centos 設置user1 在創建新文件時,文件的所屬組為sysadmins 刪除user1…3 刪除sysadmins 2、三種權限rwx對…

    Linux干貨 2016-08-04
  • vim常用快捷鍵

    1、vim /etc/vimrc進入配置文件 如果不知道vimrc文件在哪,可使用 :scriptnames 來查看 set nu      #行號 set tabstop=4  #一個tab為4個空格長度 set ai  #設置自動縮進 syntax on   #高亮   2、基本 空格鍵 向右移動一格 x 刪除后面…

    2017-09-05
欧美性久久久久