IT/프로그래밍

[파이썬] 파이썬 클래스의 속성 [패스트 캠퍼스 챌린지 34일]

뜻밖의 행복 2022. 2. 26. 23:38
반응형

안녕하세요? 뜻밖의 행운입니다.

패캠 온라인 강의 도전 34일 되는 날입니다.

오늘도 매우 중요한 파이썬의 클래스에 대해서 배웠습니다.

과거에 배웠던거에서 추가로 나왔네요

역시 중요한 만큼 기능이 한 두가지가 아니네요 

배울때 확실히 배워서 잘 응용해야겠습니다.

 

클래스의 매서드에 대해서 추가로 배웠습니다.

 

오늘 배운 내용을 정리 하면 아래와 같습니다.

 

인스턴스 매서드

클래스 매서드

정적 매서드 

 

총 3가지 입니다.

 

각각의 사용 예시는 

class Unit:
    """
    인스턴스 속성 : 이름, 체력, 방어막, 공격력
    클래스 속성 : 전체 유닛 개수
    """
    count = 0
    def __init__(self, name, hp, shield, demage):
        self.name = name 
        self.hp = hp
        self.shield = shield
        self.demage = demage
        Unit.count += 1
        print(f"[{self.name}](이)가 생성 되었습니다.")

    def __str__(self):
        return f"[{self.name}] 체력 : {self.hp} 방어막 : {self.shield} 공격력 : {self.demage}"

    # 인스턴스 메서드 (instance method)
    # 인스턴스 속성에 접근할 수 있는 메서드
    def hit(self, demage):
        # 방어막 변경
        if self.shield >= demage:
            self.shield -= demage
            demage = 0
        else:
            demage -= self.shield
            self.shield = 0
        
        # 체력 변경
        if demage > 0:
            if self.hp > demage:
                self.hp -= demage
            else:
                self.hp = 0
    
    # 클래스 메서드 (class method)
    # 클래스 속성에 접근하는 메서드
    @classmethod
    def print_count(cls):
        print(f"생성된 유닛 개수 : [{cls.count}]개")

probe = Unit("프로브", 20, 20, 5)
zealot = Unit("질럿", 100, 60, 16)
dragoon = Unit("드라군", 100, 80, 20)

probe.hit(16)
print(probe)
probe.hit(16)
print(probe)
probe.hit(16)
print(probe)

Unit.print_count()

print(dir(probe))

 

동작 시키면 잘 동작하는 것이 보이지요?

 

특히 

    # 인스턴스 메서드 (instance method)
    # 인스턴스 속성에 접근할 수 있는 메서드
    def hit(self, demage):
        # 방어막 변경
        if self.shield >= demage:
            self.shield -= demage
            demage = 0
        else:
            demage -= self.shield
            self.shield = 0
        
        # 체력 변경
        if demage > 0:
            if self.hp > demage:
                self.hp -= demage
            else:
                self.hp = 0

부분은 처음 데미지가 방어막을 때리고 

데미지가 방어막 보다 높으면 방어막만 깎이고 체력이 깎이지 않고

다시 동작해서 공격력이 방어막 보다 높다면 체력을 깎는 코드 입니다.

 

3번 동작 시키니까 프로브 체력이 0으로 되는 모습이 보입니다.

class Math:

    # 정적 메서드(static method)
    # 인스턴스를 만들 필요가 없는 메서드
    @staticmethod
    def add(x, y):
        return x + y

    @staticmethod
    def sub(x, y):
        return x - y

print(Math.add(3, 4))
print(Math.sub(3, 4))

정적 매서드는 기존 클래스와 다르게 

사용하기 위해서 인스턴스 형식으로 할당할 필요가 없는 매서드 입니다.

 

네 인스턴스에 할당하지 않고 바로 사용가능한것이 보입니다.



 

반응형