Python魔術方法


1. 查看屬性

  方法: __dir__

  意義: 返回類或者對象的所有成員名稱列表。dir()函數就是調用__dir__()。如果提供__dir__(),則返回屬性的列表,否則會盡量從__dict__屬性中收集信息。

  如果dir([obj])參數包含方法__dict__(),該方法將被調用。如果參數不包含__dir__(),該方法將最大限度地收集參數信息。

  dir()對於不同類型的對象具有不同的行為:

    如果對象是模塊對象,列表包含模塊的屬性名。

    如果對象是類型或者類對象,列表包含類的屬性名,及它的基類的屬性名。

    否則,列表包含對象的屬性名,它的類的屬性名和類的基類的屬性名。

# animal.py

# cat.py

2. 魔術方法

分類

  創建與銷毀: __init__與__del__、hash:可哈希、bool:布爾、可視化、運算符重載、容器和大小、可調用對象、上下文管理、反射、描述器、其他雜項

  方法:__hash__

  意義:內建函數hash()調用的返回值,返回一個整數。如果定義這個方法該類的實例就可hash。

  方法: __eq__

  意義:對應於==操作符,判斷2個對象是否相等,返回bool值

  __hash__方法只是返回一個hash值作為set的key,但是去重還需要__eq__來判斷2個對象是否相等。

  hash值相等,只是hash沖突,不能說明兩個對象是相等的。

  因此,一般來說提供__hash__方法是為了作為set或者dict的key的,所以去重需要同時提供__eq__方法。

  1. 練習:設計二維坐標類Point,比較2個坐標是否相等?

思考:list類為什么不可hash?

  源碼中有一句__hash__=None,也就是如果調用__hash__()相當於None(),一定會報錯。

  所有類都繼承自object,而這個類是具有__hash__()方法的,如果一個類不能被hash,就是把__hash__設置為None了。

  方法:__bool__

  意義:內建函數bool(),或者對象放在邏輯表達式的位置,調用這個函數返回布爾值。沒有定義__bool__(),就找__len__()返回長度,非0為真。如果__len__()也沒有定義,那么所有實例都返回真。

可視化:

  方法:__repr__

  意義:內建函數repr()對一個對象獲取字符串表達。如果一個定義了__repr()但沒有定義__str__,那么在請求該類的實例的“非正式”的字符串表示時也將調用__repr__()

  方法:__str__

  意義:str()函數、內建函數format、print()函數調用,需要返回對象的字符串表達

  方法:__bytes__

  意義:bytes的時候,返回一個對象的bytes表達,即返回bytes對象

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM