`

Python --- __call__ (可调用对象)

 
阅读更多
转自: http://hi.baidu.com/feng2211/blog/item/a1f392239ad8ce5f9822edf1.html

__call__

Python中有一个有趣的语法,只要定义类型的时候,实现__call__函数,这个类型就成为可调用的。

换句话说,我们可以把这个类型的对象当作函数来使用,相当于 重载了括号运算符。

例如,现在我们要计算重力环境下的自然落体位移。我们知道Sy=(gt**2)/2,那么,我们可以建立一个函数:

def g_dpm(t):

    return (9.8*t**2)/2

我们都知道,地球表面的重力加速度约等于9.8m/s**2,这个函数实在没什么技术含量。

慢,头儿说了,我要算的是火星啊¥%#!

呃……你能说人家无理取闹么?EA的FIFA足球里,我还见过微重力模式的球场,总之,在计算机程序里,很多超现实的需求都有可能。

恩,最简单的办法当然是:

def mar_g_dpm(t):

    return (3.92*t**2)/2 #火星表面的重力加速度约等于地球表面的2/5

不过,你真的能保证下次那个可爱的策划不会再设计一个金星场 景?或者木星?或者该死的大魔导师行会开始出售新的魔法卷轴——重力操控?

当然,我们可以这样设计这个函数:

def g_dpm(g, t):

    return (g*t**2)/2

但是g相对于t,是一 个稳定得多的数量,基本上,在一次相关运算中,g可以当作常 量。那么,一个可调用对象也许更适合。下面定义这样一个类型:

class g_dpm(object):

    def __init__(self, g):

        self.g = g

    def __call__(self, t):

        return (self.g*t**2)/2

计算地球场景的时候,我们就可以令e_dpm = g_dpm(9.8),s = e_dpm(t)。同样的方式,可以很容易的生成其他重力环境下的 自由落地公式。
分享到:
评论

相关推荐

    python-3.6.5-amd32-amd64.zip

    - 提高了性能:Python 3.6引入了新的字节码指令,如`LOAD_METHOD`和`CALL_METHOD`,优化了方法调用的性能。 - 引入了异步IO:新增了`asyncio`库,支持协程,提高了I/O密集型应用的效率。 - 字符串格式化改进:...

    Python 096.__call__()方法和可调用对象.mp4

    Python 096.__call__()方法和可调用对象.mp4

    浅谈python中的__init__、__new__和__call__方法

    总结一下,`__init__`用于初始化对象状态,`__new__`负责对象的创建,而`__call__`使对象变得可调用。理解这三个方法的用途和交互对于深入掌握Python面向对象编程至关重要。在实际编程中,根据需求选择合适的方法...

    Python-pythonjrpc一个基于JSONRPCv20的python远程调用框架

    Python-jrpc是一个基于JSON-RPC 2.0标准的Python远程调用框架,它允许不同进程或计算机间的程序调用对方的方法,就像它们在同一个进程中一样。这种技术在分布式系统和微服务架构中非常常见,因为可以实现服务之间的...

    python 中的-call-方法.docx

    在Python中,“call”一词通常与函数调用和特殊方法__call__相关联。...在类中实现__call__方法后,类的实例对象就变得可调用。 调用实例对象时,实际上会执行__call__方法中的代码。 参数: __call__方法的参数是可选

    对python特殊函数 __call__()的使用详解

    一个类实例也可以变成一个可调用对象,只需要实现一个特殊方法__call__()。 我们把 Person 类变成一个可调用对象: class Person(object): def __init__(self, name, gender): self.name = name self.gender = ...

    visual studio调用python.doc

    使用PyObject_GetAttrString()函数可以获取Python函数对象,然后使用PyEval_CallObject()函数来调用Python函数。 知识点4: Python函数参数传递 在C++程序中,可以使用PyObject_GetAttrString()函数来获取Python...

    python中__call__方法示例分析

    Python中的__call__允许程序员创建可调用的对象(实例),默认情况下, __call__()方法是没有实现的,这意味着大多数实例是不可调用的。然而,如果在类定义中覆盖了这个方法,那么这个类的实例就成为可调用的。 test....

    c 调用Python

    总结起来,"C调用Python"涉及到Python C API的学习和使用,这包括初始化Python环境、执行Python代码、调用Python函数、处理Python对象以及错误处理等步骤。通过这样的集成,可以充分利用Python的便利性与C/C++的性能...

    详解Python中的__new__、__init__、__call__三个特殊方法

    其中,`__new__`、`__init__` 和 `__call__` 是三个非常重要的魔术方法,它们分别负责对象的创建、初始化以及使对象可调用。接下来,我们将深入探讨这三个方法的具体用途及其工作原理。 #### 1. __new__ `__new__`...

    Python中有趣在__call__函数

    在Python编程语言中,`__call__`函数是一个特殊的方法,它使得类的实例能够像函数一样被调用。这个特性让Python具有了高度的灵活性和可扩展性。通过实现`__call__`方法,我们可以自定义对象的行为,使得它们在被调用...

    Python-面向对象.xmind(思维导图)

    内容:面向对象 ...Python中万事万物皆对象,而面向对象的三大特性:封装、继承和多态。 常见的面向对象编程语言:Java / C++ / Python等等。 魔法函数: 3.1init()构造函数、__str__()、__call__()、__new__()

    Python库 | cpymad-1.8.1-cp37-cp37m-manylinux1_x86_64.whl

    在Python编程领域,库是开发者不可或缺的工具,它们提供了各种功能和模块,使得编程工作更加高效和便捷。"cpymad-1.8.1-cp37-cp37m-manylinux1_x86_64.whl" 是一个专门为Python 3.7版本设计的轮子文件,它属于Python...

    面向对象编程基础_python面向对象_python教程_

    在这个例子中,`call_method`函数接受一个对象作为参数,并调用它的`method`方法。尽管`obj1`和`obj2`来自不同的类,但它们都可以响应`method`调用,这就是多态性。 四、访问控制 1. **访问修饰符**:Python没有...

    Python库 | viztracer-0.4.0-cp38-cp38-macosx_10_14_x86_64.whl

    1. **调用图(Call Graph)**:viztracer可以生成详细的调用图,显示函数间的调用关系,帮助开发者识别性能瓶颈和不必要的计算。 2. **时间线视图(Timeline View)**:展示程序执行的时间线,可以看到每个函数的...

    MySQL-python-1.2.3

    - 可以调用存储过程,通过`CALL`语句执行并获取结果。 8. **连接池管理**: - 为了提高效率,可以使用连接池来管理数据库连接,例如`pymysql.cursors.CursorFactory`。 9. **异常处理**: - 在执行数据库操作时...

    PyPI 官网下载 | fire_python-0.41.tar.gz

    `fire`库是一个强大的命令行工具,它的主要功能是将Python函数转化为可执行的命令行界面。这个库由Google开源,目的是简化命令行应用的创建过程。通过`fire`,开发者可以轻松地将Python代码转换成易于使用的命令行...

Global site tag (gtag.js) - Google Analytics