python中__call__()方法的用法

参考:https://www.cnblogs.com/fierydragon/p/12910281.html

 __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
    """
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值