zoukankan      html  css  js  c++  java
  • 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

      

  • 相关阅读:
    JS---案例:大量字符串拼接效果实现
    JS高级---三种创建对象的方式
    松软科技Web课堂:JavaScript HTML DOM 动画
    JS-DOM事件
    JS DOM操作(创建、遍历、获取、操作、删除节点)
    ES6函数的扩展
    月薪20k的web前端开发程序员,他们都会的这6招
    JS高级---识别正则表达式是否匹配
    揭秘webpack plugin
    react-React深入-一等公民-props-onChange
  • 原文地址:https://www.cnblogs.com/fierydragon/p/12910281.html
Copyright © 2011-2022 走看看