簡體   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