Python中的魔法方法

作者: olaH | 来源:发表于2018-08-08 22:08 被阅读2次

    想多么简单就多么简单


    __ 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_ _()方法

    相关文章

      网友评论

        本文标题:Python中的魔法方法

        本文链接:https://www.haomeiwen.com/subject/araxpftx.html