Python 如何修复AttributeError:';str';对象没有属性'_半径';?
我有这段python代码,看起来非常直截了当,但当我尝试加载它时,我得到一个错误,如上所述。您也可以查看下面的完整错误消息。请问我做错了什么?谢谢你Python 如何修复AttributeError:';str';对象没有属性'_半径';?,python,attributeerror,Python,Attributeerror,我有这段python代码,看起来非常直截了当,但当我尝试加载它时,我得到一个错误,如上所述。您也可以查看下面的完整错误消息。请问我做错了什么?谢谢你 import math class Circle2D(object): def __init__(self, x = 0, y = 0, radius = 0): self._x = x self._y = y self._radius = radius def __str__(se
import math
class Circle2D(object):
def __init__(self, x = 0, y = 0, radius = 0):
self._x = x
self._y = y
self._radius = radius
def __str__(self):
return "Circle with center (" + str(self._x) + ", " + str(self._y) + ")"
def getX(self):
return self._x
def getY(self):
return self._y
def getArea(self):
return (math.pi * self._radius**2)
def getPerimeter(self):
return (math.pi * 2 *self._radius)
def containsPoint(self, x, y):
if (((x - self._x)**2 - (y - self._y)**2) < self._radius**2):
return True
else:
return False
def contains(self, second):
distance = math.sqrt((self._x - second._x)**2 + (self._y - second._y)**2)
if ((second._radius + distance) <= self._radius):
return True
else:
return False
def overlaps(self, second):
distance = math.sqrt((self._y - second._y)**2 + (self._x - second._x)**2)
if (distance <= (self._radius + second
._radius)):
return True
else:
return False
def __contains__(self, anotherCircle):
distance = math.sqrt((self._x - anotherCircle._x)**2 + (self._y - anotherCircle._y)**2)
if(self._radius >= (anotherCircle._radius + distance)):
return True
else:
return False
def __cmp__(self, anotherCircle):
if self._radius > anotherCircle._radius:
return 1
elif self._radius > anotherCircle._radius:
return -1
else:
return 0
def __eq__(self, anotherCircle):
if self._radius == anotherCircle._radius:
return True
else:
return False
def __ne__(self, anotherCircle):
if self._radius == anotherCircle._radius:
return False
else:
return True
导入数学
类Circle2D(对象):
def uuu init uuuu(self,x=0,y=0,半径=0):
自我。x=x
自我。_y=y
自半径=半径
定义(自我):
返回“带中心的圆(“+str(self.\ux)+”,“+str(self.\uy)+”)
def getX(自我):
返回自我
def getY(自我):
回归自我
def getArea(自):
返回(math.pi*self.\u半径**2)
def GetPermission(自我):
返回(math.pi*2*self.\u半径)
def containsPoint(自身、x、y):
如果(((x-自x)**2-(y-自y)**2)另一个圆。_半径:
返回-1
其他:
返回0
定义(自身,另一个循环):
如果自身半径==另一个圆半径:
返回真值
其他:
返回错误
定义(自身、另一圈):
如果自身半径==另一个圆半径:
返回错误
其他:
返回真值
当我运行它时,经过几步之后,shell只显示:
Traceback (most recent call last):
File "C:\Users\wxwdd_000\Desktop\HW_2.py", line 124, in <module>
main()
File "C:\Users\wxwdd_000\Desktop\HW_2.py", line 121, in main
print 'c1 == "Hello"?', c1 == "Hello"
File "C:\Users\wxwdd_000\Desktop\HW_2.py", line 57, in __eq__
if self._radius == anotherCircle._radius:
AttributeError: 'str' object has no attribute '_radius'
回溯(最近一次呼叫最后一次):
文件“C:\Users\wxwdd_000\Desktop\HW_2.py”,第124行,在
main()
文件“C:\Users\wxwdd_000\Desktop\HW_2.py”,第121行,主目录
打印“c1==“你好”?,c1==“你好”
文件“C:\Users\wxwdd_000\Desktop\HW_2.py”,第57行,在__
如果自身半径==另一个圆半径:
AttributeError:“str”对象没有属性“\u radius”
如何修复代码?
Circle2D.\uuu eq\uuu
假设另一个圆是Circle2D
实例。但您正在传递str objecct
要处理这个问题,您需要检查实例类型
def __eq__(self, anotherCircle):
return isinstance(anotherCircle, Circle2D) and \
self._radius == anotherCircle._radius
Circle2D.\uuuu eq\uuuu
假设另一个圆是Circle2D
实例。但您正在传递str objecct
要处理这个问题,您需要检查实例类型
def __eq__(self, anotherCircle):
return isinstance(anotherCircle, Circle2D) and \
self._radius == anotherCircle._radius
假设
c1
是一个圆,那么表达式c1==“Hello”
调用c1.\uuu eq\uuuuu(“Hello”)
,将“Hello”赋值给该函数内的另一个圆和“Hello”是str
假设c1
是一个圆,那么表达式c1==“Hello”
调用c1.\uuuu eq\uuuuu(“Hello”)
,将“Hello”分配给此函数中的另一个圆。而“Hello”是一个str
您无法将Circle2D
实例与字符串进行比较,因为eq\uuuuu
(相等)方法在第二个对象上查找\u radius
属性,在本例中,该属性是字符串,因此没有
您可能没有意识到c1
是一个Circle2D
,或者您试图将它的相等性与“Hello”
进行比较,作为一个早期测试,但并不期望它为真
如果将c1
与另一个Circle2D
进行比较,则不会出现此错误。可能是c2
当您试图计算c1==“Hello”
时,Python实际上调用了这个方法:c1。您无法将Circle2D
实例与字符串进行比较,因为方法在第二个对象上查找\u radius
属性,在本例中,该属性是字符串,因此没有
您可能没有意识到c1
是一个Circle2D
,或者您试图将它的相等性与“Hello”
进行比较,作为一个早期测试,但并不期望它为真
如果将c1
与另一个Circle2D
进行比较,则不会出现此错误。可能是c2
当您试图计算c1==“Hello”
时,Python实际上调用了这个方法:c1