以下是此问题所需的最小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
答案 0 :(得分:3)
默认值是在编译函数对象时被评估的表达式。 Point
的查找将失败,因为此时尚未创建名为Point
的类。
这可以通过为默认值提供默认值None
并在方法体内对其进行操作(已定义名称Point
)来进行侧面步骤:
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
,以便不在那里对类名进行硬编码。