這篇文章詳解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中文網其他相關文章!