詳解pyhon中方法、屬性、迭代器

高洛峰
發布: 2017-03-10 19:25:56
原創
1411 人瀏覽過

這篇文章詳解pyhon中方法、屬性、迭代器

建構方法:

建構方法代表著類似先前範例中所使用過的那種名為init的初始化方法

當一個物件被建立後,會立即呼叫建構方法

>>> class FooBar:
    def __init__(self):
        self.somevar=42

        
>>> f=FooBar()
>>> f.somevar
>>> class fO
SyntaxError: invalid syntax
>>> class FooBar():
    def __init__(self,value=42):
        self.somevar=value

        
>>> f=FooBar('This is a constructor argument')
>>> f.somevar
'This is a constructor argument'
登入後複製

 重寫一般方法和特殊的建構方法

>>> class Bird:
    def __init__(self):
        self.hungry=True
    def eat(self):
        if self.hungry:
            print 'Aaaah...'
            self.hungry=False
        else:
            print 'No,thanks!'

            
>>> b=Bird()
>>> b.eat()
Aaaah...
>>> b.eat()
No,thanks!
>>> class SongBird(Bird):
    def __init__(self):
        Bird.__init__(self)  #调用超类的构造方法
        self.sound='Squawk!'
    def sing(self):
        print self.sound

        
>>> sb=SongBird()
>>> sb.sing()
Squawk!
>>> sb.eat()
Aaaah...
>>> sb.eat()
No,thanks!
登入後複製

super函數

#super (SongBird,self)

>>> __metaclass__=type
>>> class Bird:
    def __init__(self):
        self.hungry=True
    def eat(self):
        if self.hungry:
            print 'Aaaah...'
            self.hungry=False
        else:
            print 'No,thinks!'

            
>>> class SongBird(Bird):
    def __init__(self):
        super(SongBird,self).__init__()
        self.sound='Squawk!'
    def sing(self):
        print self.sound

        
>>> n=SongBird()
>>> n.sing()
Squawk!
>>> n.eat()
Aaaah...
>>> n.eat()
No,thinks!
登入後複製

屬性

透過存取器定義的特性稱為屬性

>>> class Rectangle:
    def __init__(self):
        self.width=0    #特性
        self.height=0   #特性
    def setSize(self,size):    #通过访问器方法改变特性
        self.width,self.height=size
    def getSize(self):    #通过访问器方法访问特性
        return self.width,self.height

    
>>> r=Rectangle()
>>> r.width=10
>>> r.height=5
>>> r.getSize()
(10, 5)
>>> r.setSize((150,100))
>>> r.width
登入後複製

property函數

>>> __metaclass__=type
>>> class Rectangle:
    def __init__(self):
        self.width=0
        self.height=0
    def setSize(self,size):
        self.width,self.height=size
    def getSize(self):
        return self.width,self.height
    size=property(getSize,setSize)

    
>>> r=Rectangle()
>>> r.width=10
>>> r.height=5
>>> r.size
(10, 5)
>>> r.size=150,100
>>> r.width
登入後複製

 迭代器

迭代器就是具有next

>>> 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
>>> it=iter([1,2,3])
>>> it.next()
>>> it.next()
>>> class TestIterator:
    value=0
    def next(self):
        self.value+=1
        if self.value>10: raise StopIteration
        return self.value
    def __iter__(self):
        return self

    
>>> ti=TestIterator()
>>> list(ti)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
登入後複製

 yield 生成器

任何包含yield語句的函數稱為生成器。每次產生一個值(使用yield語句),函數就會被凍結,即函數停在那個點等待被激活,函數被激活後從停止的那點開始執行

>>> nested=[[1,2],[3,4],[5]]
>>> def flatten(nested):
    for sublist in nested:
        for element in sublist:
            yield element

            
>>> for num in flatten(nested):
    print num
2
4
登入後複製


以上是詳解pyhon中方法、屬性、迭代器的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板