Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python "instance has no attribute ..."

I have some problem with Python, so heres my class to this point:

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)

and when I try to use method "center" in another class like that:

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))

I got this message:

Rectangle instance has no attribute "center". 

I dunno what to do now, why don't it see my method?

like image 619
Patrycja Arisa Brzeska Avatar asked Feb 22 '26 19:02

Patrycja Arisa Brzeska


1 Answers

Reading your code, it appears you define center outside of the Rectangle class, because of an indentation error.

Therefore, Rectangle instances do not have any center method.

I tried with the right indentation, and it did work.

like image 124
Right leg Avatar answered Feb 25 '26 10:02

Right leg



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!