<p>您已经在<code>GetRide</code>类中声明了<code>haversine</code>函数。在类内部声明它会使它成为类的实例方法。必须从类的实例调用实例方法。在</p>
<pre><code># Call it directly from a `GetRide` instance
my_get_ride = GetRide() # create an instance of the class
my_get_ride.haversine(lat1, lng1, lat2, lng2) # call it from the instance
# Or call it from within another method of `GetRide` from self
def get(self, ...):
self.haversine(...)
</code></pre>
<p>假设您没有使用<code>self</code>参数声明<code>haversine</code>,那么这两个调用都会产生以下错误:</p>
^{pr2}$
<p>它说您给了它5,因为python将自动将实例作为<code>lat1</code>之前的第一个参数传入。真正发生的是:</p>
<pre><code>haversine(my_get_ride, lat1, lng1, lat2, lng2)
</code></pre>
<p>您可以通过更新haversine方法来纠正这一问题,方法是像使用<code>get</code>方法一样使用第一个参数<code>self</code>,然后从必须从'self调用<code>get</code>方法的<code>haversine</code>。在</p>
<pre><code>def haversine(self, lat1, lng1, lat2, lng2):
# method body
def get(self, request, route_id):
# first part of method body
x = self.haversine(d_route.origin_lat,d_route.origin_lng, route.origin_lat, route.origin_lng )
# second part of method body
</code></pre>
<hr/>
<p>或者,如果您不想在<code>GetRide</code>类中包含<code>haversine</code>,那么可以在同一个文件中的类之外,在{<cd2>}类定义之前或之后声明它。在</p>
<pre><code># here it is defined outside of the class
def haversine(lat1, lng1, lat2, lng2):
# method body
class GetRide(APIView):
# other code
def get(self, request, route_id):
# method body
</code></pre>