您当前的位置:首页 > 文章 > python特殊函数之__call__函数的作用

python特殊函数之__call__函数的作用

作者:AI浩 时间:2023-10-10 阅读数:294 人阅读
作用
将一个类实例也可以变成一个可调用对象。

详解
__call__ 是 Python 中一个魔术方法(magic method),它用于定义对象的函数调用行为。换句话说,当你尝试调用一个具有 __call__ 方法的对象时,Python 会自动调用该方法。

下面是一个简单的例子来说明 __call__ 的作用:

class MyClass:
    def __init__(self, value):
        self.value = value

    def __call__(self):
        return self.value * 2

obj = MyClass(5)

print(obj())  # 输出 10


在这个例子中,我们创建了一个名为 MyClass 的类,它有一个 __call__ 方法。当我们创建了一个 MyClass 的实例并尝试调用它时,Python 会自动调用 __call__ 方法,该方法返回实例的 value 属性的两倍。因此,当我们打印 obj() 时,输出为 10。

__call__ 方法可以用于实现许多不同的行为,例如:

自定义对象的函数调用行为;
将对象转换为函数;
实现装饰器或代理;
实现模拟或模拟测试。
需要注意的是,__call__ 方法必须返回一个值,否则调用表达式将导致一个错误。此外,由于 __call__ 方法本身是一个特殊的方法,因此不能在普通类中直接调用。

实例
另一个实例:

class Person(object):
    def __init__(self, name, gender):
        self.name = name
        self.gender = gender

    def __call__(self, friend):
        print('My name is %s...' % self.name)
        print('My friend is %s...' % friend)


p = Person('AI浩', 'male')
p("AI")

改造斐波那契数列

class Fib(object):
    def __init__(self):
        pass

    def __call__(self, num):
        a, b = 0, 1;
        self.l = []

        for i in range(num):
            self.l.append(a)
            a, b = b, a + b
        return self.l

    def __str__(self):
        return str(self.l)

    __rept__ = __str__


f = Fib()
print(f(200))

速度嘎嘎的!

本站大部分文章、数据、图片均来自互联网,一切版权均归源网站或源作者所有。

如果侵犯了您的权益请来信告知我们删除。邮箱:1451803763@qq.com