IT/프로그래밍

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

뜻밖의 행복 2022. 2. 25. 15:45
반응형

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

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

오늘도 매우 중요한 파이썬의 클래스에 대해서 또 복습을 했습니다.

그 중에서도 클래스 속성에 대해서 다시 강의를 했는데

기존에 배웠던게 비해서 추가 된것은 

비공개 속성 이었습니다. 

 

 

오늘 배운 내용

 

인스턴스 속성(instance attribute)

클래스 속성(class attribute)

비공개 속성(private attribute) 

 

인스턴스 속성(instance attribute)은 각 객체마다 다르게 가지는 속성을 뜻합니다.

클래스 속성(class attribute)은 모든 객체가 공유하는 속성을 뜻합니다.

비공개 속성(private attribute)은 클래스 안에서만 접근이 가능한 속성을 뜻합니다.

그렇데 실제 예제를 보는것이 습득하기도 더 쉽겠죠?

 

아래가 오늘 배운 내용 총정리 판입니다.

class Unit:
    """
    인스턴스 속성 : 이름, 체력, 방어막, 공격력
     -> 객체마다 다른 값을 가지는 속성
    
    클래스 속성 : 전체 유닛 개수
    -> 모든 객체가 공유하는 속성
    
    비공개 속성
    -> 클래스 안에서만 사용 가능한 속성
    
    """
    count = 0 #여기서 count가 바로 클래스 속성입니다. 
    def __init__(self, name, hp, shield, demage):
        self.name = name 
        self.__hp = 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}"

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

# 인스턴스 속성 수정
probe.demage += 1
print(probe)

# 비공개 속성 접근
probe.__hp = 9999
print(probe)

# 네임 맹글링 (name mangling)
probe._Unit__hp = 9999
print(probe)

# 전체 유닛 개수
print(Unit.count)

천천히 한버 살펴 보겠습니다.

class Unit:
    count = 0 #여기서 count가 바로 클래스 속성입니다. 
    def __init__(self, name, hp, shield, demage):
        self.name = name 
        self.__hp = 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}"

클래스를 정의 하는 부분입니다. 지난번에 배운것과 큰 차이는 없습니다.

달라진것은 count = 0 과 Unit.count += 1 그리고 self.__hp 입니다.

각각 살펴 보면 count 의 경우 unit 인스턴스 1개가 생성 될때마다 올라가는 구조임을 알 수 있습니다.

스타크래프트 게임을 생각하면 유닛 1개가 생성 될때마다 인구수 1이 올라가는 것을 생각하면 됩니다.

__hp 비공개는 설명보다 실제 실행시켜보면 확실해서 실행시켜 보겠습니다.

 

우선 인스턴스 3개를 생성한것이 보입니다. 

뭐 게임으로 치면 유닛 3개가 생산된것이겠네요?

 

probe.demage +=1 을 하니 실제로 공격력 5에서 6으로 변경 되는 것이 보입니다.

이런식으로 인스턴스 속성이 수정 되고 

이것은 인슨턴스 수정이니 다른 객체들은 영향을 받지 않겠지요?

 

위에서 비공개로 설정한 __hp 실제로 

인스턴스 수정을 해보니 체력이 9999가 아닌 기존 20으로 되어 있는것을 볼 수 있습니다.

이처럼 일반적인 방법으로 수정이 안되는 것이 비공개 속성입니다.

 

마지막으로 모두가 공유 하는 속성

인스턴스 3개를 생성했으니 count가 3으로 조회되어야 할 텐데

그렇게 될까요???

실제로 실행시켜 보니 3이 잘 나오는 것을 알 수 있습니다.

 

굳!

반응형