15.5 객체는 가변이다
객체의 속성에 할당을 해서 객체의 상태를 바꿀 수 있다. 예를 들어 위치를 변경하지 않고 직사각형의 크기를 변경하기 위해 width와 height의 값을 수정할 수 있다.
box.width = box.width + 50
box.height = box.height + 100
객체를 수정하는 함수도 작성할 수 있다. 예를 들어 grow_rectangle은 Rectangle 객체, 두 숫자 dwidth와 dheight를 받아서 인수로 받은 직사각형의 너비와 높이에 숫자를 더한다.
def grow_rectangle(rect, dwidth, dheight):
rect.width += dwidth
rect.height += dheight
어떤 일이 일어났는지 예제로 살펴보자.
>>> box.width, box.height
(150.0, 300.0)
>>> grow_rectangle(box, 50, 100)
>>> box.width, box.height
(200.0, 400.0)
grow_rectangle 함수 안에서 rect는 box의 별칭이므로 함수에서 rect를 수정하면 box가 변경된다.
연습삼아 Rectangle과 두 숫자 dx, dy를 받는 move_rectangle 함수를 작성하라. 이 함수는 corner의 x 좌표에 dx를 더하고, y 좌표에 dy를 더해서 직사각형의 위치를 변경해야 한다.