構造函數、super

  • 構造函數、super
class Bird:
    def __init__(self):  #注意別把構造方法寫錯了,__ 不是 _
        self.hungry = True
    def eat(self):
        if self.hungry:
            print 'Aaah...'
            self.hungry = False
        else:
            print 'No,thanks'
            
#直接調用類的方法
class SongBird(Bird):
    def __init__(self):
        Bird.__init__(self)   #直接調用類的方法,沒有實例會被綁定,就可自由地提供須要的self參數,這樣的方法稱爲未綁定方法
        self.sound =  'Squawk!'
    def sing(self):
        print self.sound

sb = SongBird()
sb.sing()
sb.eat()
sb.eat()

#使用super調用父類
__metaclass__= type #super 函數只在新式類中起做用

class SongBird(Bird):
    def __init__(self):
        super(SongBird,self).__init__() #注意格式
        self.sound = 'Squwk!'
    def sing(self):
        print self.sound

sb = SongBird()
sb.sing()
sb.eat()
sb.eat()

  • 基本的序列和映射規則
序列和映射是對象的集合
  •  __len__(self):
該方法返回集合中所含項目的數量。對於序列來講,這就是元素的個數,對於映射來講,則是鍵-值對的數量,若是__len__返回0(而且沒有實現重寫該行爲的__nonzero__),對象會被當作布爾變量中的假值(空的列表、元祖、字符串額字典同樣)進行處理

  • __getitem__(self.key):
該方法返回與鍵對應的值,對一個序列,鍵應該是一個 0 ~ n-1的整數(或者像後面所說的負數),n 是序列的長度,對於映射來講,能夠使用任何種類的鍵

  • __setitem__(self,key):
該方法應該按照必定的方式存儲和key相關的value,該值隨後可以使用 __getitem__來獲取,固然,只能爲能夠修改的對象定義這個方法

  • __delitem__(self,key):
該方法在對一個部分對象使用 del 語句時被調用,同時必須刪除和鍵相關的鍵,這方法可修改的對象定義的(並非刪除所有的對象,而只刪除一些須要移除的元素)

  • 對這些方法的附加要求
a、對於一個序列來講,若是鍵是負整數,那麼要從末尾開始計數。換句話說就是 x[-n] 和 x[len(x) - n]是同樣的
b、若是鍵是不合適的類型(例如,對於序列使用字符串做爲鍵),會引起一個 TypeError 異常
c、若是序列的索引是正確的類型,但超出一個範圍,應該引起一個 IndexError異常
相關文章
相關標籤/搜索