转自:
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引入了新的字节码指令,如`LOAD_METHOD`和`CALL_METHOD`,优化了方法调用的性能。 - 引入了异步IO:新增了`asyncio`库,支持协程,提高了I/O密集型应用的效率。 - 字符串格式化改进:...
Python 096.__call__()方法和可调用对象.mp4
总结一下,`__init__`用于初始化对象状态,`__new__`负责对象的创建,而`__call__`使对象变得可调用。理解这三个方法的用途和交互对于深入掌握Python面向对象编程至关重要。在实际编程中,根据需求选择合适的方法...
Python-jrpc是一个基于JSON-RPC 2.0标准的Python远程调用框架,它允许不同进程或计算机间的程序调用对方的方法,就像它们在同一个进程中一样。这种技术在分布式系统和微服务架构中非常常见,因为可以实现服务之间的...
在Python中,“call”一词通常与函数调用和特殊方法__call__相关联。...在类中实现__call__方法后,类的实例对象就变得可调用。 调用实例对象时,实际上会执行__call__方法中的代码。 参数: __call__方法的参数是可选
一个类实例也可以变成一个可调用对象,只需要实现一个特殊方法__call__()。 我们把 Person 类变成一个可调用对象: class Person(object): def __init__(self, name, gender): self.name = name self.gender = ...
使用PyObject_GetAttrString()函数可以获取Python函数对象,然后使用PyEval_CallObject()函数来调用Python函数。 知识点4: Python函数参数传递 在C++程序中,可以使用PyObject_GetAttrString()函数来获取Python...
Python中的__call__允许程序员创建可调用的对象(实例),默认情况下, __call__()方法是没有实现的,这意味着大多数实例是不可调用的。然而,如果在类定义中覆盖了这个方法,那么这个类的实例就成为可调用的。 test....
总结起来,"C调用Python"涉及到Python C API的学习和使用,这包括初始化Python环境、执行Python代码、调用Python函数、处理Python对象以及错误处理等步骤。通过这样的集成,可以充分利用Python的便利性与C/C++的性能...
其中,`__new__`、`__init__` 和 `__call__` 是三个非常重要的魔术方法,它们分别负责对象的创建、初始化以及使对象可调用。接下来,我们将深入探讨这三个方法的具体用途及其工作原理。 #### 1. __new__ `__new__`...
在Python编程语言中,`__call__`函数是一个特殊的方法,它使得类的实例能够像函数一样被调用。这个特性让Python具有了高度的灵活性和可扩展性。通过实现`__call__`方法,我们可以自定义对象的行为,使得它们在被调用...
内容:面向对象 ...Python中万事万物皆对象,而面向对象的三大特性:封装、继承和多态。 常见的面向对象编程语言:Java / C++ / Python等等。 魔法函数: 3.1init()构造函数、__str__()、__call__()、__new__()
在Python编程领域,库是开发者不可或缺的工具,它们提供了各种功能和模块,使得编程工作更加高效和便捷。"cpymad-1.8.1-cp37-cp37m-manylinux1_x86_64.whl" 是一个专门为Python 3.7版本设计的轮子文件,它属于Python...
在这个例子中,`call_method`函数接受一个对象作为参数,并调用它的`method`方法。尽管`obj1`和`obj2`来自不同的类,但它们都可以响应`method`调用,这就是多态性。 四、访问控制 1. **访问修饰符**:Python没有...
1. **调用图(Call Graph)**:viztracer可以生成详细的调用图,显示函数间的调用关系,帮助开发者识别性能瓶颈和不必要的计算。 2. **时间线视图(Timeline View)**:展示程序执行的时间线,可以看到每个函数的...
- 可以调用存储过程,通过`CALL`语句执行并获取结果。 8. **连接池管理**: - 为了提高效率,可以使用连接池来管理数据库连接,例如`pymysql.cursors.CursorFactory`。 9. **异常处理**: - 在执行数据库操作时...
`fire`库是一个强大的命令行工具,它的主要功能是将Python函数转化为可执行的命令行界面。这个库由Google开源,目的是简化命令行应用的创建过程。通过`fire`,开发者可以轻松地将Python代码转换成易于使用的命令行...