构造方法和其他普通方法不同的地方在于,当一个对象被创建后,会立即调用构造方法。
Python中创建一个构造方法,只要把init方法的名字从简单的init修改为魔法版本 __init__即可:
class FooBar:
def __init__(self):
self.somevar=42
>>>f=FooBar()
>>>f.somevar
使用super函数
__metaclass__type
class Bird:
def __init_(self):
self.hungry=True
def eat(self):
if self.hungry:
print 'Aaaah...'
self.hungry=False
else:
print 'No,thanks!'
class SongBird(Bird):
def __init__(self):
super(SongBird,self).__init__()
self.sound='Squawk!'
def sing(self):
print self.sound
__iter__ 方法会返回一个迭代器(iterator),所谓迭代器就是具有next方法。
斐波那契数
class Fibs:
def __init__(self)
self.a=0
self.b=1
def next(self):
self.a,sellf.b=selfb,self.a+self.b
return self.a
def __iter__(self)
return self
>>>fibs=Fibs() 产生一个Fibs对象
>>>for f in fibs:
if f>1000:
print f
break
1597
注意:正式的说法是,一个实现了__iter__方法的对象是可迭代的,一个实现了next方法的对象则是迭代器。
使用list构造方法显式地将迭代器转化为列表
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)