move_left() 함수는 같은 클래스 내에 있는 move() 함수를 사용하는데, self 키워드를 사용하여 move를 호출합니다. 그러면 여기서 move를 호출할 때 self가 붙는 이유가 뭘까요? 이는 클래스로 생성되는 객체가 모두 다르기 때문에 클래스 내에 변수, 함수를 호출할 때 자신을 가리키는 값이 필요하기 때문입니다. robot1에서 move_left()를 호출한다면 self.move("Left") 코드에서 self가 객체 자신을 의미하므로 robot1로 바뀌어 robot1.move("Left")가 호출될 것입니다. 마찬가지로 robot2에서 move_left()를 호출한다면 self.move("Left") 코드에서 self가 robot2로 바뀌어 robot2.move("Left")가 호출될 것입니다.
그렇다면 반대로 앞의 move_left 함수 내에서 self.move("Left")를 호출할 때 self를 제거해 보면 무슨 일이 발생할까요?
class Robot:
def move(self, direction):
print("{} 쪽으로 움직입니다.".format(direction))
def move_left(self):
move("Left")
def fly(self):
print("날아갑니다.")
robot1 = Robot()
robot1.move_left()
NameError: name 'move' is not defined