作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试编写一个类圈子,这是我第一次使用OOP,为此我也写了一个Point类,但是当我运行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
最佳答案
类Point
的实例没有属性center
,在这三行代码中,您假定它们具有:
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
check
是
Point
的实例,则不要引用
check.center
。
if isinstance(check,(Point)):
if math.sqrt((self.center.x-check.x)**2 + (self.center.y-check.y)**2) <= self.radius:
return True
关于python - 为什么我得到一个错误,该错误是指我的类(class)圈子中不存在的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23583767/
我是一名优秀的程序员,十分优秀!