0

所以我正在尝试编写一个函数来初始化两个点并输出以前制作的方法。

部分代码如下:

    class Point(Geometry):
next_id = 0
def __init__(self,x,y,):
    self.x = x
    self.y = y
    self.id = Point.next_id
    Point.next_id += 1  
def __str__(self):
    return "(%0.2f, %0.2f)" % (self.x, self.y)

def quadrat(self):
        if (self.x > 0 and self.y > 0):
            return "Quad I"
        elif (self.x < 0 and self.y > 0):
            return "Quad II"
        elif (self.x < 0 and self.y < 0):
            return "Quad III"
        elif (self.x > 0 and self.y < 0):
            return "Quad IV"
        elif (self.x == 0 and self.y == 0):
            return "Origin"        
        elif (self.x == 0):
            return "Y-axis"
        elif (self.y == 0):
            return "X-axis"

def distance(p0, p1):
    dist = math.sqrt((p0.x - p1.x)**2 + (p0.y - p1.y)**2)
    return dist

def equality():
        if (self.x == self.y):
            print "True"
        else:
            print "False"  

def identify():
        if(p0.id == p1.id):
            print "True"
        else:
            print "False"
def pointTest():
    global P1,P2
    P1 = Point(-3,-3)
    P2 = Point(0,0)
    print "P1) ID =", P1.id,", Coordinates=", P1,", Location=",P1.quadrat()
    print "P2) ID =", P2.id,", Coordinates=", P2,", Location=",P2.quadrat()
    print "Distance between",P1,"and",P2,"is %0.2f" % (P1.distance(P2))
    print "P1==P2?",P1==P2
    print "P1 same as P2?",P1.id==P2.id    

P1 = None    
P2 = None    
print pointTest()

当我的观点在方法之外定义并且print语句在方法之外时,我的输出完美。

但是我需要在方法中初始化这些点,并且我的print语句也需要在方法中。

当我调用它时,我得到了pointTest未定义的错误。

我的输出需要如下所示:

<<<< print pointTest

这将为我的印刷声明提供答案。

4

1 回答 1

0

如果您需要使用与 不同的方法初始化变量__init__,则必须将它们传递给初始化方法并直接访问它们的属性:

def pointTest(p1, p2):
    p1.x = -3
    p1.y = -3 
    p2.x = 0
    p2.y = 0

p1 = Point()
p2 = Point()

pointTest(p1, p2)

或将它们声明为全局变量,这通常是一个坏主意,但可以快速解决:

def pointTest():
    global p1, p2
    p1 = Point(-3, -3)
    p2 = Point(0, 0)

p1 = None
p2 = None

pointTest()

在这两种情况下,您都可以将调用添加到方法print内部pointTest

请注意,在第二种情况下,您不需要将p1and声明p2None,但最好使每个变量都显式。您不希望您的方法弹出您不知道的全局变量。


此外,您的pointTest方法似乎未定义。

关于您的原始缩进,您的方法似乎pointTest确实在代码块内。

因此,该pointTest方法可能仅在比您调用它的位置更深的范围内声明,因此没有定义。要么把它放在那个块之外,要么把你所有的 consequentprint放在那个块里。

于 2017-01-07T04:30:17.467 回答