`

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__()的使用详解

    一个类实例也可以变成一个可调用对象,只需要实现一个特殊方法__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. **异常处理**: - 在执行数据库操作时...

    Python库 | py_mini_racer-0.1.9-cp36-cp36m-macosx_10_6_intel.whl

    **Python库py_mini_racer-0.1.9-cp36-cp36m-macosx_10_6_intel.whl详解** 在Python编程中,库扮演着至关重要的角色,它们提供了丰富的功能,使得开发者能够快速、高效地构建应用程序。`py_mini_racer`就是这样一个...

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

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

    Python-Syntastic是Vim的一个语法检查插件

    当你在Vim中编写Python代码时,它会自动调用外部的语法检查工具(如pylint、flake8等)对当前文件进行分析,并将任何潜在的语法错误或风格问题以高亮的方式显示在屏幕底部的信息栏或者行号旁边。这使得开发者能够在...

Global site tag (gtag.js) - Google Analytics