我对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 :(得分:4)
只需调用另一种方法:
class Road(object):
...
def kappa(self, t):
return abs(self.curvature(t=t))