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 08:54
下一篇 2017-11-20 19:59

相關推薦

  • 負載均衡一個PHP應用

    1、mariadb、nfs服務器的設置 (centos 7) [root@localhost ~]# rpm -q rpcbind rpcbind-0.2.0-32.el7.x86_64 [root@localhost ~]# rpm -q nfs-utils (默認n…

    Linux干貨 2016-10-31
  • 馬哥教育網絡班22期+第4周課程練習 忍者亂太郎喻成

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。   cp -rp /etc/skel /home/tuser1   chmod -R 700 /home/tuser1 2、…

    Linux干貨 2016-10-09
  • SELinux

    軟件的安全性 提高軟件的安全性 選擇安全系數較高的系統 提高現有系統的安全性 計算機的安全等級 D:最低的安全級別,提供最少的安全防護,系統訪問無限制。DOS C:訪問控制的權限,能夠實現可控的安全防護,個人賬戶管理,審計和資源隔離 Unix Linux windowNT B:支持多級安全,通過硬件對安全數據進行保護 A:最高級別,提供驗證設計,要求數據從生…

    Linux干貨 2017-05-21
  • 網絡管理的相關命令

    今天要說的是有關網絡的一些相關內容,主要介紹的有以下幾點:網絡的服務:Centos6/7中的常用命令,如何手動配置網絡,路由表的相關內容,關于Bond(僅主機模式)網絡接口的配置以及Bridge(橋接)的網絡接口配置。 首先要說的是網絡的服務: 1,Centos6/7的常用網絡的命令: Centos6:禁用網卡:ifconfig 網卡名 down啟用網卡:i…

    2017-09-07
  • keepalive

    HA Cluster: 集群類型:LB(lvs/nginx(http/upstream, stream/upstream))、HA、HP SPoF: Single Point of Failure 系統可用性的公式:A=MTBF/(MTBF+MTTR)(0,1), 95%幾個9(指標): 99%, …, 99.999%,99.9999%;99%:…

    Linux干貨 2017-05-22
  • Linux下計劃任務神器-Crontab

    作為系統運維人員都清楚,在Linux下定義重復性的任務,我們一般會采用crontab來進行:crontab這個指令所設置的工作將會循環的一直進行下去!可循環的時間為分鐘、小時、每日、每月、每周。 crontab計劃任務: 1)常見用法:crontab命令的作用和用法如下:描述:為每個用戶維護周期性的計劃任務文件用法:crontab [-u 用戶][-l|-r…

    Linux干貨 2016-07-22
欧美性久久久久