首页 > 解决方案 > Python:如何定义一个行为像函数的类?

问题描述

我想在 python 中定义一个行为类似于具有附加属性的函数的类。特别是,它应该无缝地应用于变量。

让我们试着用一个数学例子来解释。假设我非常喜欢正弦函数,但也对它们的频率感兴趣。函数 x -> sin(omega x) 具有属性frequency,即 omega 的值。它也可以应用于浮点 x。

我可以写:

from numpy import sin, pi

class SinFunc:
    def __init__(self, omega):
        self.frequency = omega

    def apply_to(self, x):
        return sin(self.frequency * x)

然后我可以使用正弦函数:

MySinFunc = SinFunc(3)
print(MySinFunc.frequency)
print(MySinFunc.apply_to(pi)) 
# output
# 3
# 0 (almost!)

但是我想要的是能够直接写,仍然定义MySinFunc(pi)了属性频率。

如何做到这一点?谢谢!

标签: pythonfunctionclass

解决方案


要使对象可调用,您需要添加一个__call__处理调用的类方法。

将您的apply_to函数重命名为__call__,它将起作用。


推荐阅读