【python學習筆記】9.魔法方法、屬性和迭代器

【python學習筆記】9.魔法方法、屬性和迭代器

  • 魔法方法:xx, 收尾各有兩個下劃線的方法
  • __init__(self): 構造方法,建立對象時候自動執行,能夠爲其增長參數,
  • 父類構造方法不會被自動調用, 能夠經過super函數(super(FatherCall, self).init())或者未綁定構造方法,來調用父類的構造方法。super是有在__metaclass__=type時才能夠使用, 
  • 有多個父類時,super能保證每一個父類的構造方法都被執行
  • __del__: 析構方法:對象被回收以前執行
  • 基本的序列和映射規則:
魔法方法 集合方法
__len(self)__(self) len(a)
__getitem__(self,key) a[i]取值
__setitem__(self,key) a[i]賦值
__delitem__(self,key) del a[i] 刪除
  • propery(fget,fset,fdel,doc__):建立新的屬性,該屬性的取值,賦值,刪除操做會執行對應的fget,fset,fdel函數
class Rectangle(object):
    def __init__(self):
            self.width=0
            self.heigth=0
    def setSize(self, size):
            self.width, self.heigth = size
    def getSize(self):
            return self.width, self.heigth
    size = property(getSize,setSize)

r = Rectangle()
r.width=1
r.heigth=3

print r.getSize()
print r.size

r.size=99,44

print r.getSize()
print r.size
  • 靜態方法:Staticmethod修飾,沒有self參數,須要cls參數,而且可以被類本事調用
  • 類成員方法:Classmethod修飾,python

  • 迭代器: 實現了next方法的對象是迭代器函數

  • __iter__:返回一個迭代器,inter方法也能夠反悔迭代器學習

  • 迭代器可用於for語句和list函數spa

class Fibs:
    def __init__(self):
        self.a = 0
        self.b = 1
    def next(self):
        self.a,self.b=self.b,self.a+self.b
        return self.a
    def __iter__(self):
        return self

fibs=Fibs()
for f in fibs:
    if f > 1000:
        print f
        break
        
------
1597
  • 生成器:任何包含yield語句的函數被稱爲生成器,當他被調用時候,會返回一個迭代器,每次請求一個值,就會執行生成器中的代碼,直到遇到一個yield或者return語句,,yiled語句生成一個值,return意味着生成器中止執行
def flatten(nested):
    for sublist in nested:
        for element in sublist:
            yield element

nested=[[1,2],[3,4],[5]]
for num in flatten(nested):
    print num

print list(flatten(nested))

it=flatten(nested)
print it.next()

------------
1
2
3
4
5
[1, 2, 3, 4, 5]
1
相關文章
相關標籤/搜索