2016-11-28 42 views
1

我對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) 
+0

應該'kappa'採取't'作爲參數?或者,kappa是某些特定't'曲率的絕對值? –

+0

@Robᵩ是的,我應該編輯 – HFBrowning

回答

4

只需調用其他方法:

class Road(object): 

    ... 

    def kappa(self, t): 
     return abs(self.curvature(t=t)) 
+0

這麼簡單明顯(現在我知道了)!謝謝! – HFBrowning

相關問題