Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.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“;实例没有属性…“;_Python_Methods_Attributes - Fatal编程技术网

Python“;实例没有属性…“;

Python“;实例没有属性…“;,python,methods,attributes,Python,Methods,Attributes,我对Python有一些问题,下面是我的类: class Rectangle: def __init__(self, x1=0, y1=0, x2=0, y2=0): if(x1 > x2): raise ValueError("x1 cannot be bigger than x2!") if(y1 > y2): raise ValueError("y1 cannot be bigger than y2!") self.pt1

我对Python有一些问题,下面是我的类:

class Rectangle:

def __init__(self, x1=0, y1=0, x2=0, y2=0):
    if(x1 > x2):
        raise ValueError("x1 cannot be bigger than x2!")
    if(y1 > y2):
        raise ValueError("y1 cannot be bigger than y2!")
    self.pt1 = Point(x1, y1)
    self.pt2 = Point(x2, y2)

def __str__(self):      
    return str("[(" + str(self.pt1.x) + ", " + str(self.pt1.y) + "), (" + str(self.pt2.x) + ", " + str(self.pt2.y) + ")]")

def __repr__(self):        
    return str("Rectangle(" + str(self.pt1.x) + ", " + str(self.pt1.y) + ", " + str(self.pt2.x) + ", "+ str(self.pt2.y) + ")")

def __eq__(self, other): 
    return (self.pt1== other.pt1 and self.pt2 == other.pt2)

def __ne__(self, other):       
    return not self == other

def center(self):         
    return Point((self.pt2.x - self.pt1.x) / 2, (self.pt2.y - self.pt1.y) / 2)
当我尝试在另一个类中使用方法“center”时,如下所示:

class TestRectangle(unittest.TestCase):

    def setUp(self):
        self.first = Rectangle(1, 2, 3, 4)
        self.second = Rectangle(2, 2, 4, 5)

    def test_init(self):
        with self.assertRaises(ValueError):
            Rectangle(5, 1, 2, 3)
        self.assertEqual(self.first.pt1, Point(1, 2))
        self.assertEqual(self.first.pt2, Point(3, 4))
        self.assertEqual(self.second.pt1.x, 2)      

    def test_str(self):
        self.assertEqual(str(self.first), "[(1, 2), (3, 4)]")

    def test_repr(self):
        self.assertEqual(repr(self.first), "Rectangle(1, 2, 3, 4)")

    def test_eq(self):
        self.assertTrue(self.first == Rectangle(1,2,3,4))
        self.assertFalse(self.first == self.second)

    def test_ne(self):
        self.assertFalse(self.first != Rectangle(1,2,3,4))
        self.assertTrue(self.first != self.second)

    def test_center(self):
        self.assertEqual(self.first.center(), Point(2, 2.5))
我得到了这个信息:

Rectangle instance has no attribute "center". 

我不知道现在该怎么办,为什么它看不到我的方法?

阅读代码时,由于缩进错误,您似乎在
矩形
类之外定义了
中心

因此,
Rectangle
实例没有任何
center
方法


我尝试了正确的缩进,它确实起了作用。

为了完整性,您应该编辑第一个代码段,以包括如何定义类
Rectangle
。此外,
setUp
不应该包含任何assert*调用。考虑将<代码>断言> <代码>到它自己的测试方法。好的,固定的,谢谢!您应该确保方法正确缩进
center
可能是在模块中与类
Rectangle
一起定义的函数,而不是该类的方法。如何在记事本++中修复缩进?