• python __call__() 方法


    python中一切皆对象,函数也是对象,同时也是可调用对象(callable)。
    
    关于可调用对象,我们平时自定义的函数、内置函数和类都属于可调用对象,但凡是可以把一对括号()应用到某个对象身上都可称之为可调用对象,判断对象是否为可调用对象可以用函数 callable
    

      

    # 1、一个类实例要变成一个可调用对象,只需要实现一个特殊方法__call__()。

    class Animal:
    def __init__(self, name, hobby):
    self.name = name
    self.hobby = hobby

    def __call__(self, food):
    print('animal name is %s...' % self.name)
    print('animal name like eat %s...' % food)


    if __name__ == '__main__':
    animal = Animal('cat', 'play')
    # animal.__call__('fish')
    animal('fish')
    print(callable(animal))


    实质上说,这意味着 animal() 与 animal.__call__() 是相同的。注意 __call__ 参数可变。这意味着你可以定义 __call__ 为其他你想要的函数,无论有多少个参数

    # 2、 __call__ 在那些类的实例经常改变状态的时候会非常有效

    class TEST:
        def __init__(self, size, x, y):
            self.x, self.y = x, y
            self.size = size
    
        def __call__(self, x, y):
            """
            改变实体的位置
            :param x:
            :param y:
            :return:
            """
            self.x, self.y = x, y
            print(self.x, self.y)
    
        def test_num(self):
            print(self.x)
    
    
    if __name__ == '__main__':
        test = TEST(1, 2, 3)  # 创建实例
        test(4, 5)  # 实例可以象函数那样执行,并传入x y值,修改对象的x y
        test.test_num()
        """
        结果:
            4 5
            4
        """

    # 3、参考大神链接

    https://www.jianshu.com/p/e1d95c4e1697?utm_source=oschina-app

      

  • 相关阅读:
    uoj388 【UNR #3】配对树
    uoj386 【UNR #3】鸽子固定器
    回忆录
    xcode 把项目代码提交到远程SVN服务器
    IOS 点击按钮拨号
    ADO与达梦7产生的一个未知问题
    DSN 建立达梦7(DM)连接
    iOS UIControl 事件的说明(转)
    IOS开发copy,nonatomic, retain,weak,strong用法
    QT Creator 使用SVN的版本号做为编译的版本信息
  • 原文地址:https://www.cnblogs.com/fierydragon/p/12910281.html
Copyright © 2020-2023  润新知