本文共 1791 字,大约阅读时间需要 5 分钟。
super
内置方法:__len__(self), __getitem(self, key) , __setitem__(self, key,value), __delitem__(self, key)
property: 4个参数分别是fget, fset, fdel doc
class rect: 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=rect()>>> r.width = 10>>> r.height = 5>>> r.size(10, 5)>>> r.size = 150, 100>>> r.width150__getattribute__(self.name)
__getattr__(self.name)
__setattr__(self.name, value)
__delattr__(self,name)
使用self.__dict__[name]避免死循环。
迭代器:对象有__iter__可以迭代,next实现迭代: 放在for 循环使用,能返回所需的迭代器
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 1597把实现去掉:
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 pass def __iter__(self): return self
>>> fibs =Fibs()>>> i =1>>> for f in fibs: if i < 10: print(f) i+=1 else: print('finish') break NoneNoneNoneNoneNoneNoneNoneNoneNonefinish内建函数 __next__:
>>> it = iter([1,2,3])>>> it.__next__()1>>> it.__next__()2>>> it.__next__()3>>> it.__next__()Traceback (most recent call last): File "还有:", line 1, in it.__next__()StopIteration
class titer: value = 0 def __next__(self): self.value += 1 if self.value > 10: raise StopIteration return self.value def __iter__(self): return self
>>> ti =titer()>>> list(ti)[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]本质上是给个地址入口,不断滚值!
转载地址:http://sqmmi.baihongyu.com/