`

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 096.__call__()方法和可调用对象.mp4

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

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

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

    python中__call__方法示例分析

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

    python中的__init__ 、__new__、__call__小结

    注意,这里的第一个参数是self即对象本身【注意和new的区别】3.__call__(self, *args, **kwargs) 如果类实现了这个方法,相当于把这个类型的对象当作函数来使用,相当于 重载了括号运算符  看具体的例子:复制代码...

    Python-面向对象和内存分析 2.zip

    096.__call__()方法和可调用对象 097.方法没有重载_方法的动态性 098.私有属性 099.私有方法 100.@property装饰器_get和set方法 101.面向对象的三大特征说明(封装、继承、多态) 102.继承 103.方法的重写 104.object...

    python-ubus:用于通过JSON-RPC访问ubus的Python库

    适用于Ubus的Python接口 该软件包提供了一个pythonic接口,用于通过其单独打包的JSON-RPC接口访问ubus < >。 图书馆使用 Ubus类是访问此软件包所有功能的入口点,它提供对可用接口的访问: ubus = Ubus('router....

    Python中有趣在__call__函数

    Python中有一个有趣的语法,只要定义类型的时候,实现__call__函数,这个类型就成为可调用的。 换句话说,我们可以把这个类型的对象当作函数来使用,相当于 重载了括号运算符。 class g_dpm(object): def __init__...

    python中__call__内置函数用法实例

    对象通过提供__call__(slef, [,*args [,**kwargs]])方法可以模拟函数的行为,如果一个对象x提供了该方法,就可以像函数一样使用它,也就是说x(arg1, arg2…) 等同于调用x.__call__(self, arg1, arg2)。模拟函数的...

    Python-函数和内存分析 2.zip

    096.__call__()方法和可调用对象 097.方法没有重载_方法的动态性 098.私有属性 099.私有方法 100.@property装饰器_get和set方法 101.面向对象的三大特征说明(封装、继承、多态) 102.继承 103.方法的重写 104.object...

    c 调用Python

    简单的Hello world 以后不断更新 慢慢的来, ^_^

    python __call__ 和 callable()

    callable() 函数用于检查一个对象是否是可调用的。如果返回 True,object 仍然可能调用失败;但如果返回 False,调用对象 object 绝对不会成功。 对于函数、方法、lambda 函式、 类以及实现了 `__call__` 方法的类...

    call-cpp-from-python-with-boost:使用Boost库从python调用C ++代码

    使用Boost库从python调用C ++代码 在这个简短的教程中,我将向您展示如何使用从python调用C ++代码。 我举一个非常简单的例子。 提高底数(幂)。 但是,我提出的方法可以使用更复杂的C ++接口/库/等来推广到无数的...

    C语言调用Python代码的方法

    你想在C中安全的执行某个Python调用并返回结果给C。 例如,你想在C语言中使用某个Python函数作为一个回调。 解决方案 在C语言中调用Python非常简单,不过涉及到一些小窍门。 下面的C代码告诉你怎样安全的调用: #...

    Python如何在main中调用函数内的函数方式

    一般在Python中在函数中定义的函数是不能直接调用的,但是如果要用的话怎么办呢? 一般情况下: def a():#第一层函数 def b():#第二层函数 print('打开文件B') b()#第二层中的函数直接调用 结果显示: Traceback...

    如何在 MATLAB 中调用 Python 库函数(基础):在这个脚本中,它解释了如何在 MATLAB 中调用 Python 库函数。-matlab开发

    强调 : 在此脚本中,它为您提供有关系统和配置要求了解 Python 和 MATLAB import Cammands 调用用户定义的 Python 模块重新加载修改后的用户定义的 Python 模块Python 函数帮助创建一个 Python 对象附加信息 - ...

    python-rpc框架,基于ws长连接暴露

    python—rpc框架,基于ws长连接暴露RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如...

    判断python对象是否可调用的三种方式及其区别详解

    用于检查对象是否可调用,返回True也可能调用失败,但是返回False一定不可调用。 官方文档:https://docs.python.org/3/library/functions.html?highlight=callable#callable 判断对象类型是否是FunctionType type...

    Python __setattr__、 __getattr__、 __delattr__、__call__用法示例

    #一个模块支持html、text、xml等格式的打印,根据传入的formate参数的不同,调用不同的函数实现几种格式的输出 import statsout def output(data, format=”text”):   output_function = getatt

Global site tag (gtag.js) - Google Analytics