方法输出是否需要绑定到“self”才能被其他方法使用?

时间:2016-11-28 21:45:37

标签: python oop

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

1 个答案:

答案 0 :(得分:4)

只需调用另一种方法:

class Road(object):

    ...

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