Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何修复AttributeError:';str';对象没有属性'_半径';?_Python_Attributeerror - Fatal编程技术网

Python 如何修复AttributeError:';str';对象没有属性'_半径';?

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

我有这段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__(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