➜ 문자열 | 슬라이싱, 문자열처리함수, 문자열포맷, 탈출문자
➜ 자료구조 | 리스트(List), 튜플(Tuple), 딕셔너리(Dictionary),
집합(Set), 자료구조 변환
➜ 반복문 | 조건문(if, elif, else), 반복문(for, while), 리스트
컴프리헨션(List Comprehension)
➜ 함수 | def, 전역변수&지역변수, 기본값&키워드인자, 가변인자
➜ 파일입출력, 출력조절, 파일 불러오기 및 읽기, 피클(pickle)
➜ 클래스(Class), __init__, 멤버변수, 메소드
➜ 상속(Inheritance), 다중상속(Multiple Inheritance)
➜ 메소드 오버라이딩, pass, super
➜ 예외 처리, 에러 발생시키기, 사용자 정의 에러, finally
➜ 내장함수, 메서드 총정리(문자열, 리스트, 딕셔너리)
클래스와 객체
클래스(Class)
클래스는 새로운 데이터 타입을 만드는 것이다. 그리고 이 클래스 내에는 변수와 메소드를 선언할 수 있다.
클래스는 객체 지향 프로그래밍의 기본 단위이며 동일한 속성(attribute) 및 동작(method)을 정의하는 형태이다.
객체(Object)
객체는 클래스를 기반으로 사용되는 일련의 데이터와 함수(메소드)를 가진 인스턴스이다.
유닛 클래스 생성
먼저, 전투 유닛의 기본 속성과 생성 메소드를 정의한 Unit 클래스를 생성한다.
class Unit:
def __init__(self, name, hp, damage):
self.name = name
self.hp = hp
self.damage = damage
print("{0} 유닛이 생성되었습니다.".format(self.name))
print("체력 {0}, 공격력 {1}".format(self.hp, self.damage))
여기서 __init__ 메소드는 객체 생성 시 초기화를 위한 함수로, 객체 생성 과정에서 자동으로 호출된다.
이 예제에서 __init__ 메소드는 파라미터로 받은 정보를 객체의 속성으로 할당하고, 유닛 생성 메시지를 출력한다.
객체 생성과 사용
Unit 클래스를 사용하여 각각의 유닛 객체를 생성한다.
marine1 = Unit("마린", 40, 5)
marine2 = Unit("마린", 40, 5)
tank = Unit("탱크", 150, 35)
각 유닛이 생성될 때마다 인스턴스를 만들고 생성자(__init__)에 유닛의 이름, 체력, 공격력을 전달한다.
이렇게 생성된 객체는 독립적인 속성을 갖게 되며, 속성을 요청하거나 수정할 수 있다.
print(marine1.name) # "마린"
marine1.hp = 30
print(marine1.hp) # 30
멤버 변수 확장
객체의 속성은 해당 객체에 동적으로 추가할 수 있다.
예를 들어, 특정 유닛에 추가 속성을 부여할 수 있다.
wraith1 = Unit("레이스", 80, 5)
wraith2 = Unit("빼앗은 레이스", 80, 5)
wraith2.clocking = True
if wraith2.clocking == True:
print("{0} 는 현재 클로킹 상태입니다.".format(wraith2.name))
wraith2.clocking 속성은 해당 유닛에만 추가되며, 이런 유연성을 활용하면 객체에 동적으로 다양한 속성을 부여할 수 있다.
메소드 - 공격 유닛 클래스
class AttackUnit:
def __init__(self, name, hp, damage):
self.name = name
self.hp = hp
self.damage = damage
def attack(self, location):
print("{0} : {1} 방향으로 적군을 공격합니다. [공격력{2}]".format(self.name, location, self.damage))
def damaged(self, damage):
print("{0} : {1} 데미지를 입었습니다.".format(self.name, damage))
self.hp -= damage
print("{0} : 현재 체력은 {1}입니다.".format(self.name, self.hp))
if self.hp <= 0:
print("{0} : 파괴되었습니다.".format(self.name))
firebat1 = AttackUnit("파이어뱃", 50, 16)
firebat1.attack("5시")
firebat1.damaged(25)
firebat1.damaged(25)
공격 유닛(AttackUnit)에 정의된 메소드들을 살펴보면
- attack 메소드를 사용하여 지정된 위치로 공격할 수 있다.
- damaged 메소드를 통해 데미지를 입을 수 있다.
그리고 체력이 0 이하가 되면 파괴되었음이 출력된다.
'Python' 카테고리의 다른 글
[Python/파이썬] 메소드 오버라이딩, pass, super (0) | 2023.08.17 |
---|---|
[Python/파이썬] 상속(Inheritance), 다중상속(Multiple Inheritance) (0) | 2023.08.15 |
[Python/파이썬] 출력조절, 파일입출력, 파일 불러오기 및 읽기, 피클(pickle) (0) | 2023.08.06 |
[Python/파이썬] 함수 | def, 전역변수&지역변수, 기본값&키워드인자, 가변인자 (0) | 2023.08.04 |
[Python/파이썬] 반복문 | 조건문(if, elif, else), 반복문(for, while), 리스트 컴프리헨션(List Comprehension) (0) | 2023.08.03 |