详解pyhon中方法、属性、迭代器

高洛峰
Lepaskan: 2017-03-10 19:25:56
asal
1398 orang telah melayarinya

这篇文章详解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'
Salin selepas log masuk

重写一般方法和特殊的构造方法

>>> 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!
Salin selepas log masuk

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!
Salin selepas log masuk

属性

通过访问器定义的特性被称为属性

>>> 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
Salin selepas log masuk

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
Salin selepas log masuk

迭代器

迭代器就是具有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]
Salin selepas log masuk

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
Salin selepas log masuk


Atas ialah kandungan terperinci 详解pyhon中方法、属性、迭代器. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!