我对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