繁体   English   中英

我应该上课吗? (蟒蛇)

[英]Should I use a class? (Python)

我正在尝试编写一个包含一些数学函数的小型Python模块。 例如,它可能包含如下函数:

def quad(x, a, b, c):
    return a*x**2 + b*x + c

您可能会注意到它除了变量x之外还包含几个参数(即a, b, c )。 现在,如果我将它放在一个文件中并简单地导入它,最终用户必须始终使用除变量之外的参数调用该函数。 因此我想创建一个这样的类:

class quad:                                    
    def __init__(self, a, b, c):               
        self.a = a                             
        self.b = b                             
        self.c = c                             

    def eq(x):                               
        return self.a*x**2 + self.b*x + self.c 

从而允许最终用户将其用作:

q = quad(p, q, r) 
eq = q.eq      

这是正确的做事方式吗? 我对这个问题的标题非常抱歉,因为我想不出更好的一个!

这似乎是一个完全合理的类使用。 基本上,当程序涉及可以建模为具有状态的对象的事物时,您应该考虑使用类。 这里,多项式的“状态”只是系数abc

您还可以使用Python的__call__特殊方法来允许您将类视为函数本身:

class quad:
    def __init__(self, a, b, c):
        self.a = a
        self.b = b
        self.c = c

    def __call__(x):
        return self.a * x**2 + self.b * x + self.c

q = quad(p, q, r)
q(x)

另一种方法,它可以稍微清洁,只是返回一个函数,其中系数被烘焙到其中。 这基本上是一个currying的例子,正如Tichodrama提到的:

def quad(a, b, c):
    def __quad(x):
        return a * x**2 + b * x + c

    return __quad

或者使用lambda语法:

def quad(a, b, c):
    return lambda x: a * x**2 + b * x + c

这些可以像这样使用:

q = quad(p, q, r)
q(x)

看起来你正在寻找像currying这样的东西。

也许这个问题可以帮到你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM