안녕하세요!
멘토 이안입니다.
오늘은 챕터 9 “수업”에 대해 계속 배워보도록 할게요!
레슨을 공부하는 것만으로도 많은 정보가 들어와서 오늘은 챕터 2로 이만 가보겠습니다.
오늘 배울 내용:
배울 콘텐츠 (p.257 ~ p.276)
- 게임 소개
- 클래스 및 개체 만들기
1. 게임 소개
이 부분을 읽으면서 공통점에 집중해야 합니다.
먼저 “이름”, “hp”, “손상”이라는 공통점이 있습니다.
그리고 「데미지」는 공격력이므로 공격할 수 있을지도 모릅니다.
즉, 일반적인 것과 관련하여
이름, 체력, 공격력, 심지어 공격 행동까지 공통적이다.
이러한 유사점은 학습 수업에 매우 중요합니다.
클래스의 기본은 공통성에서 발생합니다.
그럼 그것을 기반으로 클래스와 객체를 만들어 봅시다!
2. 클래스 및 개체 만들기
책의 예에서처럼 클래스와 객체의 관계는 붕어빵과 붕어빵 형태의 관계입니다.
그리고 전에 말했듯이 클래스 내에서 정의된 함수를 메서드라고 합니다.
이전에 데이터 유형 str에 사용된 함수도 메소드입니다.
str 클래스에 정의된 함수입니다!
또한 메서드 내에서 정의된 변수를 인스턴스 변수라고 합니다.
클래스를 작성해 봅시다.
class Unit:
def __init__(self, name: str, hp: int, damage: int) -> None:
self.name = name
self.hp = hp
self.damage = damage
print(f"{self.name} 유닛을 생성되었습니다.")
print(f"체력 {self.hp}, 공격력 {self.damage}")
# 객체 생성
marine = Unit("마린", 40, 5)
이 클래스로 생성된 단위 “물체”말하다.
즉, 해군 물체그건. 그리고 유닛 클래스에서 예말하다.
이제 단계별로 알아 봅시다.
1) 디자이너
생성자는 말 그대로 객체를 생성합니다. 생산하는이 작업을 수행하는 데 사용되는 방법입니다.
정의된 생성자가 없으면 기본 생성자가 생성됩니다.
기본 생성자는 인수를 사용하지 않는 생성자입니다.
# 기본 생성자를 가진 클래스
class Unit:
def __init__(self) -> None:
pass
Java 및 C++는 생성자 오버로딩(다중 정의)을 지원하지만 Python은 지원하지 않습니다.
즉, 클래스에 대해 하나의 생성자만 만들 수 있습니다.
따라서 여러 값을 전달하고 기본값을 제공하여 보상할 수 있도록 합니다.
class Unit:
def __init__(self, name="marine", hp: int = 10, damage: int = 0) -> None:
self.name = name
self.hp = hp
self.damage = damage
기본값이 정의되지 않은 경우 TypeError를 발생시킵니다.
2) 인스턴스 변수
인스턴스 변수는 메소드에서 정의되고 self와 함께 사용되는 변수입니다.
책의 예를 통해 해보자.
지금까지 작성된 코드는 지상 유닛용입니다.
따라서 은폐가 불가능하다. (스텔스 기능은 없습니다.)
그래서 스텔스 기능을 추가하고자 합니다.
class Unit:
def __init__(self, name="good", hp: int = 10, damage: int = 0) -> None:
self.name = name
self.hp = hp
self.damage = damage
print(f"{self.name} 유닛이 생성되었습니다.")
print(f"체력 {self.hp}, 공격력 {self.damage}")
stealth = Unit("전투기", 80, 5)
stealth.cloacking = True
이렇게 클로킹을 true로 변경해주시면 클로킹 모드로 전환이 가능하지 않을까 싶습니다.
그러나이 코드를 입력하면 오류 메시지가 나타납니다.
클로킹에 접근할 수 없다고 나옵니다.
그러면 어떻게 해야 합니까?
이 경우 인스턴스 변수 선언이 필요합니다.
class Unit:
def __init__(self, name: str, hp: int, damage: int) -> None:
# 아래는 인스턴스 변수
self.name = name
self.hp = hp
self.damage = damage
self.cloaking = False
print(f"{self.name} 유닛이 생성되었습니다.")
print(f"체력 {self.hp}, 공격력 {self.damage}")
stealth = Unit("전투기", 80, 5)
stealth.cloaking = True
if stealth.cloaking == True:
print(f"{stealth.name}는 현재 클로킹 상태입니다.")
이와 같이.
이 부분은 책에 수록되어 있지 않으니 인스턴스 변수를 선언하고 사용하는 방법에 집중하시기 바랍니다.
여기서 혼란스러운 부분은 매개변수와 인스턴스 변수의 수입니다.
3개의 매개변수와 4개의 인스턴스 변수가 있습니다.
예, 인스턴스 변수와 매개변수의 수가 항상 같은 것은 아닙니다.
즉, 전달된 값으로 초기화하려는 경우에만 매개변수가 필요합니다.
각 유닛이 생성될 때마다 이름, 공격력, 체력을 변경하고자 하므로 파라미터로 정의(초기화)합니다.
그러나 숨기기 기능을 만들 때 기본적으로 False로 설정하려면 이러한 매개 변수 없이 사용할 수 있습니다.
위의 코드에서 “이렇게 사용할 수 있습니다.” 이해하고 진행하는 것이 좋습니다.
사실, 이 코드는 나중에 배울 “상속”에서 더 자세히 다룹니다.
3) 방법
메서드는 클래스 내부에서 정의하는 함수라고 언급했습니까?
그런 다음 위에서 쓴 내용을 예로 들겠습니다.
class Unit:
def __init__(self, name="good", hp: int = 10, damage: int = 0) -> None:
self.name = name
self.hp = hp
self.damage = damage
self.__initMessage()
def __initMessage(self):
print(f"{self.name} 유닛이 생성되었습니다.")
print(f"체력 {self.hp}, 공격력 {self.damage}")
m = Unit("마린")
마찬가지로 __initMessage도 메서드입니다.
initMessage는 객체가 생성될 때 객체 정보를 반환하는 메서드입니다.
책 273쪽에 나오는 공격도 방법이다.
매개 변수를 전달하고 공격 메시지를 내보내는 메서드입니다.
책에 나오는 예시를 통해 꼭 배워보세요!
그 시간 동안 우리는 9장 클래스 및 객체 생성을 살펴보았습니다.
여기서부터는 어려울 것 같아서 천천히 진행하겠습니다!
질문이 있으시면 댓글을 남겨주세요!
구성
* 게임 소개
* 공통점 찾기
* 클래스와 객체 생성
* 방법
* 인스턴스 변수
* 생성자
