본문 바로가기

Python

[Python/파이썬] 클래스(Class), __init__, 멤버변수, 메소드

반응형

 

 

 

 

토글

 

 

 

 

 

클래스와 객체

클래스(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 이하가 되면 파괴되었음이 출력된다.

 

 

 

 

반응형