import math
class Circle(object):
def __init__(this,x,y,rad):
this.x=x
this.y=y
this.rad=rad
def relate(circ1,circ2):
diff=__posDiff((circ1.x,circ1.y),(circ2.x,circ2.y))
print diff
def __posDiff(p1,p2):
diff=math.sqrt((p1[0]-p2[0])**2 + (p1[1]-p2[1])**2)
return diff
尝试运行上述代码时,出现以下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "Circle.py", line 18, in relate
diff=__posDiff((circ1.x,circ1.y),(circ2.x,circ2.y))
NameError: global name '_Circle__posDiff' is not defined
对python很陌生,不知道如何调用内部函数类。如果任何人都可以帮忙解释
将
__posDiff
重命名为_posDiff
(因此删除一个前导下划线)。你知道吗在名称的开头使用双下划线,当在类定义中使用这样的名称时,Python将该名称损坏以生成类私有名称。此功能用于向不应在子类中意外重写的方法添加命名空间。你知道吗
这既适用于类中定义的方法名,也适用于任何试图使用此类名称的代码。因此,在
relate
方法中对__posDiff
的引用被重写为_Circle__posDiff
(在类名前面添加了创建名称空间的前缀),但是__posDiff
函数本身没有重新命名,因为它实际上不在类内部。你知道吗参见词汇分析文档中的Reserved classes of identifiers section:
表达式引用中链接的Identifiers (Names) section:
粗体斜体强调是我的。你知道吗
相关问题 更多 >
编程相关推荐