想多么简单就多么简单
__ getattribute __(self,name):当特性name被访问时自动被调用
__ getattr __(self,name):当特性name被访问且对象没有相应的特性时被自动调用
__ setattr __(self,name,value):当试图给特性name赋值时会被自动调用
__ delattr __(self,name):当试图删除特性name时被自动调用
class Rectangle:
def __init__(self):
self.width=0;
self.height=0;
def __setattr__(self,name,value):
if name == 'size':
self.width,self.height = value
else:
self.__dict__[name] = value
def __getattr__(self,name):
if name == 'size':
return self.width,self.height
else:
raise AttributeError
__ init__()方法:初始化方法,对象被创建时调用
__ iter __()方法:当被用作迭代器使用时,必须包含此方法
next()方法:每次被访问时都会调用这个方法一次
查找斐波那契数列中比1000大的数中的最小的数
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 > 999:
print(f)
break
从上面的例子可以看出,每一次for循环,就自动调用一次 _ _ next_ _()方法
网友评论