我對Python中的面向對象編程非常陌生,我正在努力實現Python中this question的接受答案(它最初是在R中)。方法輸出是否需要綁定到「自我」才能被其他方法使用?
我有一個簡單的問題 - 是否有可能訪問一個方法的輸出在另一個方法中使用,而沒有先綁定輸出到self
?我認爲答案是「否」 - 但我也想象有一些技術可以完成我沒有想到的相同任務。
我開始的代碼如下。它的工作正常,直到你得到kappa
方法。我真的希望能夠將kappa
定義爲curvature
的簡單擴展名(因爲它只是它的絕對值),但我並不特別有興趣將它添加到屬性列表中。我也可能只是在推翻這一點,在Python中可能有一個類似於閉包的東西,或者添加到屬性列表中是Pythonic要做的事情?
import numpy as np
from scipy.interpolate import InterpolatedUnivariateSpline
class Road(object):
def __init__(self, x, y): #x, y are lists
# Raw data
self.x = x
self.y = y
# Calculate and set cubic spline functions
n = range(1, len(x)+1)
fx = InterpolatedUnivariateSpline(n, x, k=3)
fy = InterpolatedUnivariateSpline(n, y, k=3)
self.fx = fx
self.fy = fy
def curvature(self, t):
# Calculate and return the curvature
xp = self.fx.derivative(); yp = self.fy.derivative()
xpp = xp.derivative(); ypp = yp.derivative()
vel = np.sqrt(xp(t)**2 + yp(t)**2) #Velocity
curv = (xp(t)*ypp(t) - yp(t)*xpp(t))/(vel**3) #Signed curvature
return curv
def kappa(self, t):
return abs(curv)
應該'kappa'採取't'作爲參數?或者,kappa是某些特定't'曲率的絕對值? –
@Robᵩ是的,我應該編輯 – HFBrowning