PHP前端开发

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

百变鹏仔 3小时前 #Python
文章标签 详解

这篇文章详解pyhon中方法、属性、迭代器

构造方法:

构造方法代表着类似于以前例子中使用过的那种名为init的初始化方法

当一个对象被创建后,会立即调用构造方法

>>> class FooBar:    def __init__(self):        self.somevar=42        >>> f=FooBar()>>> f.somevar>>> class fOSyntaxError: 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 num24