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

 

  


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM