[英]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
這是正確的做事方式嗎? 我對這個問題的標題非常抱歉,因為我想不出更好的一個!
這似乎是一個完全合理的類使用。 基本上,當程序涉及可以建模為具有狀態的對象的事物時,您應該考慮使用類。 這里,多項式的“狀態”只是系數a
, b
和c
。
您還可以使用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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.