开发者社区> arrowhalo> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Python中的魔法方法

简介: 想多么简单就多么简单 __ getattribute __(self,name):当特性name被访问时自动被调用 __ getattr __(self,name):当特性name被访问且对象没有相应的特性时被自动调用 __ setattr __(...
+关注继续查看

想多么简单就多么简单


__ 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中的魔法方法有哪些?
公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助!
38 0
《Python编程快速上手——让繁琐工作自动化》——1.5 第一个程序
本节书摘来自异步社区《Python编程快速上手——让繁琐工作自动化》一书中的第1章,第1.5节,作者[美] Al Sweigart,王海鹏 译,更多章节内容可以访问云栖社区“异步社区”公众号查看。 1.5 第一个程序 虽然交互式环境对于一次运行一条 Python指令很好,但要编写完整的Python程序,就需要在文件编辑器中输入指令。
1971 0
+关注
arrowhalo
一位智慧与美貌并存、coding 和 cooking 兼并的乐观主义者。
37
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载