생성자는 객체가 생성될 때 바로 실행되므로 클래스의 가장 상단에 두는 것이 일반적입니다. __init__() 역시 메서드이므로 self를 첫 번째 매개변수로 넣어야 합니다. 그리고 캐릭터 이름, 체력, 공격력을 전달받는 매개변수 name, hp, ad를 차례로 넣습니다.
인스턴스 속성은 객체명.속성으로 접근한다고 했죠? 생성자에서 객체는 self로 전달되므로 self.name, self.strength, self.attack_damage에 매개변수로 전달받은 값을 각각 저장합니다. 그리고 객체 생성이 완료됐음을 알리는 안내문과 캐릭터 이름을 출력합니다.
객체를 다시 만들어 봅시다. 기존 방식으로 검술사를 만들어 보겠습니다.
swordsman = Character()
실행결과
TypeError: __init__() missing 3 required positional arguments: 'name', 'hp', and 'ad'
오류가 발생합니다. 오류 내용을 보면 인자 3개가 없다고 나옵니다. 생성자 __init__()은 객체를 생성하면 자동으로 실행됩니다. 따라서 swordsman = Character()로 객체를 생성할 때 생성자도 실행됩니다. 그런데 객체를 생성하면서 어떤 인자도 넣어 주지 않았습니다. 결국 _ _init__()에서 전달받은 인자는 객체 자신인 self 하나입니다.