zoukankan      html  css  js  c++  java
  • python3--__call__拦截调用

    __call__拦截调用

    当实例调用时,使用__call__方法。不,这不是循环定义:如果定义了,Python就会为实例应用函数调用表达式运行__call__方法。这样可以让类实例的外观和用法类似于函数。

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    
    class Prod:
        def __init__(self, value):
            self.value = value
        def __call__(self, other):
            return self.value * other
    
    x = Prod(2)
    print(x(3))
    print(x(4))
    

    运行结果:

    6
    8
    

    在这个例子中,__call__似乎没什么特别的意义。下面这个简单的方法也能提供类似功能。

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    
    class Prod:
        def __init__(self, value):
            self.value = value
        def comp(self, other):
            return self.value * other
    
    x = Prod(3)
    print(x.comp(3))
    print(x.comp(4))
    

    运行结果:

    9
    12
    

     然而,当需要为函数的API偏写接口时,__call__就变得很有用:这可以编写遵循所需要的函数来调用接口对象,同时又能保留状态信息。事实上,这可能是除了__init__构造方法以及_str__和__repr_显示格式方法外,第三个最常用的运算符重载方法了。

  • 相关阅读:
    Java操作数据库——使用JDBC连接数据库
    MySQL入门——Linux下安装后的配置文件
    Linux上搭建SVN服务
    PHP包管理工具composer
    收藏博文
    Linux上软件安装
    nginx配置详解
    Linux文本编辑器Vim使用
    Linux常用命令整理
    Linux增加swap空间
  • 原文地址:https://www.cnblogs.com/chenlin163/p/7306406.html
Copyright © 2011-2022 走看看