2016-11-28 20 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

相关问题