Python 为什么我会得到一个我';我指的是我班级圈子里一个不存在的物体?

Python 为什么我会得到一个我';我指的是我班级圈子里一个不存在的物体?,python,class,oop,compiler-errors,geometry,Python,Class,Oop,Compiler Errors,Geometry,我正在尝试编写一个类循环,这是我第一次使用OOP,为此我还编写了一个点类,但当我运行contains和intersect函数时,我收到以下错误消息: AttributeError: 'Point' object has no attribute 'center' 代码如下: import math class Point(): """ Holds data on a point (x,y) in the plane """ def __init__(self, x=0,

我正在尝试编写一个类循环,这是我第一次使用OOP,为此我还编写了一个点类,但当我运行contains和intersect函数时,我收到以下错误消息:

AttributeError: 'Point' object has no attribute 'center'
代码如下:

import math


class Point():
    """ Holds data on a point (x,y) in the plane """

    def __init__(self, x=0, y=0):
        assert isinstance(x,(int, float)) and isinstance(y,(int, float)) 
        self.x = x
        self.y = y

    def __repr__(self):
        return "Point(" + str(self.x) + "," + str(self.y) + ")"


    #getters
    def x_val(self):
        return self.x

    def y_val(self):
        return self.y

#end of class Point 




class Circle():
    """ Holds data on a circle in the plane """

    def __init__(self,*args):
        if len(args)==2:
            if isinstance(args[0],Point) and isinstance(args[1],(float,int)):
                assert args[1]>0
                self.center= args[0]
                self.radius= args[1]

        if len(args)==3:
            assert args[2]>0
            self.a=args[0]
            self.b=args[1]
            self.center= Point(self.a,self.b)
            self.radius= args[2]


    def __repr__(self):
        return "Circle centered at " + str(self.center) + " with radius " + str(self.radius)



    def contains(self,check): #ERROR!!!

        if isinstance(check,(Point)):
           if math.sqrt(((Point.x_val(self.center))-(Point.x_val(check.center)))**2 + ((Point.y_val(check.center))-(Point.y_val(check.center)))**2) <= self.radius:
               return True
        if isinstance(check,Circle): 
            test= math.sqrt(((Point.x_val(self.center))-(Point.x_val(check.center)))**2 + ((Point.y_val(self.center))-(Point.y_val(check.center))**2))
            if test < (abs((self.radius)-(check.radius))):
                return True

        else:
            return False

    def intersect(self,other):  #ERROR!!!
        check= math.sqrt(((Point.x_val(self))-(Point.x_val(other)))**2 + ((Point.y_val(self))-(Point.y_val(other)))**2)
        if check >(self.radius+other.radius):
            return False
        if check < (self.radius+other.radius):
            return True


    def draw(self,mat):
        for i in mat:
            for j in i:
                if Circle.contains(i,j):
                    mat[i[j]]==1
导入数学
类点():
“”“保存平面中某点(x,y)上的数据”“”
定义初始化(self,x=0,y=0):
断言isinstance(x,(int,float))和isinstance(y,(int,float))
self.x=x
self.y=y
定义报告(自我):
返回“点(“+str(self.x)+”,“+str(self.y)+”)
#吸气剂
def x_val(自身):
返回self.x
定义y_val(自):
回归自我
#课程结束点
类圆():
“”“保存平面中圆上的数据”“”
定义初始化(self,*args):
如果len(args)==2:
如果isinstance(参数[0],点)和isinstance(参数[1],(浮点,int)):
断言参数[1]>0
self.center=args[0]
自半径=args[1]
如果len(args)==3:
断言参数[2]>0
self.a=args[0]
self.b=args[1]
自中心=点(自a、自b)
自半径=args[2]
定义报告(自我):
返回“以“+str(自中心)+”为圆心,半径为“+str(自半径)”的圆
def包含(自我检查):#错误!!!
如果存在(检查,(点)):
如果math.sqrt(((Point.x_val(self.center))-(Point.x_val(check.center))**2+((Point.y_val(check.center))-(Point.y_val(check.center))**2)(自半径+其他半径):
返回错误
如果检查<(自身半径+其他半径):
返回真值
def牵引(自,垫):
对于mat中的i:
对于i中的j:
如果圆包含(i,j):
mat[i[j]==1

点的实例
没有属性
中心
,在这三行代码中,您假定它们有:

if isinstance(check,(Point)):
           if math.sqrt(((Point.x_val(self.center))-(Point.x_val(check.center)))**2 + ((Point.y_val(check.center))-(Point.y_val(check.center)))**2) <= self.radius:
               return True

注意,在Python中,使用方法访问属性被认为不是一种好的风格。如果要访问属性的值,只需直接访问属性即可。在某些语言中,如果以后需要更改对象的实现方式,这可能会出现问题,但在Python中,您可以随时将属性更改为属性,而不会中断代码。

168行代码?至少,给出一个完整的回溯和复制它的代码(即,不仅是你的类,还有你如何使用它们)。我理解我的错误,但我应该如何重新表述它?i、 e我如何引用Circle类中的x值?您引用
x
属性的方式与引用任何属性的方式相同:
self.center.x
check.x
将为您提供所需的属性。我已经更新了我的答案,以便进一步解释。
if isinstance(check,(Point)):
    if math.sqrt((self.center.x-check.x)**2 + (self.center.y-check.y)**2) <= self.radius:
           return True