Python中類的特殊方法

來源:互聯網
上載者:User

原文連結:http://www.pythonclub.org/python-class/special-function

一般說來,特殊的方法都被用來模仿某個行為。例如,如果你想要為你的類使用x[key]這樣的索引操作(就像列表和元組一樣),那麼你只需要實現getitem()方法就可以了。想一下,Python就是對list類這樣做的!

下面這個表中列出了一些有用的特殊方法。如果你想要知道所有的特殊方法,你可以在《Python參考手冊》中找到一個龐大的列表。

==============================================================================

名稱                     說明

---------------------------------------------------------

__init__(self,...)      這個方法在建立對象恰好要被返回使用之前被調用。

__del__(self)           恰好在對象要被刪除之前調用。

__str__(self)           在我們對對象使用print語句或是使用str()的時候調用。

__lt__(self,other)      當使用 小於 運算子(<)的時候調用。類似地,對於所有的運算子(+,>等等)都有特殊的方法。

__getitem__(self,key)   使用x[key]索引操作符的時候調用。__len__(self)           對序列對象使用內建的len()函數的時候調用。

__repr__(self)             repr() and `...` conversions

__cmp__(self, o)           Compares s to o and returns <0, 0, or >0.                         Implements >, <, == etc...

__hash__(self)             計算32位hash值,在set和dict中用到

__eq__(self,other)         比較兩個對象是否相等,在set和dict中用到

__nonzero__(self)          Returns 0 or 1 for truth value testing__getattr__(self, name)    called when attr lookup doesn't find <name>

__setattr__(self, name, val) called when setting an attr (inside, don't use "self.name = value"   use "self.__dict__[name] = val")

__delattr__(self, name)    called to delete attr <name>__call__(self, *args)   called when an instance is called as function.

==============================================================================、

其中,對於set和dict來講,很重要的兩個方法是 __hash__(self) 和 __eq__(self,other)

這兩個方法跟Java中的Object.hashCode()和Object.equals()方法類似,如果要使兩個內容相等的對象被判定為equal,就必須重載這兩個函數,如下:

class Point:    x=-1    y=-1    def __init__(self,x,y):        self.x=x        self.y=y    def __hash__(self):        return hash(self.x)^hash(self.y)    def __eq__(self, other):        return isinstance(other, self.__class__) and self.x == other.x and self.y == other.y

判斷一個Point類型的p是否在集合中,該判斷會去重:

if p not in set:   #do something



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.