zoukankan      html  css  js  c++  java
  • python (__call__)详解

    可以调用的对象

    关于 __call__ 方法,不得不先提到一个概念,就是可调用对象(callable)。
    我们平时自定义的函数、内置函数和类都属于可调用对象,但凡是可以把一对括号()应用到某个对象身上都可称之为可调用对象,判断对象是否为可调用对象可以用函数 callable
    如果在类中实现了 __call__ 方法,那么实例对象也将成为一个可调用对象。

    优雅

    你也许已经知道,在Python中,方法也是一种高等的对象。这意味着他们也可以被传递到方法中就像其他对象一样。这是一个非常惊人的特性。 
    在Python中,一个特殊的魔术方法可以让类的实例的行为表现的像函数一样,你可以调用他们,将一个函数当做一个参数传到另外一个函数中等等。
    这是一个非常强大的特性让Python编程更加舒适甜美。 __call__(self, [args...])。
    # '''调用实体来改变实体的位置。'''
    class Entity:
    def __init__(self, size, x, y): self.x, self.y = x, y self.size = size def __call__(self, x, y): # '''改变实体的位置''' self.x, self.y = x, y
    print('had changed') e = Entity(1, 2, 3) # 创建实例 e(4, 5) # 实例可以象函数那样执行,并传入x y值,修改对象的x y

    # 这个e是不是搞得很像函数一样帅气。
    允许一个类的实例像函数一样被调用。实质上说,这意味着 x() 与 x.__call__() 是相同的。注意 __call__ 参数可变。这意味着你可以定义 __call__ 为其他你想要的函数,无论有多少个参数。
  • 相关阅读:
    20171117-构建之法:现代软件工程-阅读笔记
    《团队-爬取豆瓣Top250-团队一阶段互评》
    团队-爬虫豆瓣top250项目-开发文档
    结对编程总结
    结对编程项目总结
    结对-贪吃蛇游戏-开发环境搭建过程
    结对贪吃蛇 结对编项目设计文档
    课后作业 阅读任务 阅读提问4
    课后作业 阅读任务 阅读提问3
    课后作业 现代软件工程 阅读笔记
  • 原文地址:https://www.cnblogs.com/jackson669/p/13028150.html
Copyright © 2011-2022 走看看