2017-03-10 48 views
1

以下是此问题所需的最少Point类。将类作为其方法的默认参数传递

class Point: 
     def __init__(self, x = 0, y = 0): 
      self.x = x 
      self.y = y 
     def dist_from(self, point = Point(0, 0)): 
      return ((self.x-point.x)**2 + (self.y-point.y)**2)**0.5 

我想,如果没有点通过dist_from方法从原点返回的距离。由于方法重载是不可能的,我决定通过一个Point对象(原点)作为默认值。

但我错过了一些非常基本的东西。

Traceback (most recent call last): 
    File "C:\Users\Naveen\Desktop\temp.py", line 26, in <module> 
    class Point: 
    File "C:\Users\Naveen\Desktop\temp.py", line 32, in Point 
    def dist_from(self, point = Point(0, 0)): 
NameError: name 'Point' is not defined 

回答

3

默认值是得到评估当函数对象被编译表达式。查找Point将失败,因为名为Point的类尚未在此时创建。

这可以并排默认和行为上的方法体内这一事实(其中名称Point已定义供应的None默认值阶梯:

def dist_from(self, point = None): 
     if point is None: 
      point = type(self)(0, 0) # Could do Point(0, 0) 
     return (self.x*point.x + self.y*point.y)**0.5 

我使用type(self)这里而不是Point,以便不硬编码那里的类名。

相关问题