반응형

파이썬 클래스에서 상속, 생성자 오버라이딩, 클래스 변수와 관련된 문법에 관한 간단한 정리입니다.

 

import random

class Unit:
    max_num = 1000  # 클래스 변수 : 인스턴스들이 모두 공유하는 변수
    def __init__(self, name, health, attack):
        self.name = name
        self.health = health
        self.attack = attack
        Unit.max_num -= 1
    def move(self):
        print(f"[{self.name}] 유닛")

 

뒤에 쓰일 random 함수를 위해 random 모듈을 Import했습니다.

 

max_num은 클래스 변수로 인스턴스들이 모두 공유하는 변수입니다.

아래 생성자에서 Unit.max_num을 통해 접근하는데 생성자 내부의 변수가 아니라 클래스의 변수이기 때문에 이렇게 접근합니다.

생성자가 실행될때마다 1씩 감소해서 최대 1000개의 인스턴스만 호출되도록 하는 장치입니다.

 

아래 move 함수에서는 생성자를 통해 받은 이름을 출력합니다.

f-string 사용시에 안에서 {}괄호 안에 위와 같이 변수를 넣어 출력할 수 있습니다.

 

class Luka(Unit):
    pass

class Tistory(Unit):
    def move(self):
        print(f"[{self.name}] 티스토리")

class Blog(Unit):
    # 생성자 오버라이딩
    def __init__(self, name, health, attack):
        super().__init__(name, health, attack)
        self.skills = ("컨텐츠", "글쓰기", "애드센스")

    def move(self):
        print(f"[{self.name}] 블로그")

    def skill(self):
        print(f"[{self.name}] 랜덤행동 {self.skills[random.randint(0,2)]}")

 

위의 Unit 클래스를 상속받은 3개의 클래스가 선언되었습니다.

상속시에는 괄호 옆에 상속받을 클래스의 이름이 들어갑니다.

 

Luka 클래스는 상속받은 함수만 사용하기 때문에 아무런 변동사항이 없고 pass를 적었습니다.

 

Tistory 클래스는 move 함수를 재정의했습니다.

 

Blog 클래스는 생성자가 오버라이딩 되었습니다.

이때, super().__init__를 통해 위의 생성자를 그대로 사용하고 추가적으로 필요한 요소만 정의할 수 있습니다.

skill이라는 함수는 생성자에서 정의된 skills에서 랜덤으로 하나의 요소를 정해서 출력합니다.

random.randint(0,2)를 통해 랜덤으로 셋 중 하나를 골라 출력합니다.

 

luka = Luka("루카", 1500, 200)
luka.move()
print(luka.max_num)

tistory = Tistory("티스토리", 3000, 400)
tistory.move()
print(tistory.max_num)

blog = Blog("블로그", 8000, 800)
blog.move()
blog.skill()
print(blog.max_num)

 

이제 위에서 정의된 클래스별로 인스턴스를 호출해서 함수를 테스트하는 코드입니다.

각각 정의된 함수를 호출하고 max_num을 출력해서 max_num이 제대로 공유되고 카운트되고 있는지 확인합니다.

아래는 출력 결과입니다.

 

# 첫번째 출력

[루카] 유닛
999
[티스토리] 티스토리
998
[블로그] 블로그
[블로그] 랜덤행동 컨텐츠
997

# 두번째 출력

[루카] 유닛
999
[티스토리] 티스토리
998
[블로그] 블로그
[블로그] 랜덤행동 애드센스
997

 

정상적으로 출력이 잘 되고 있는것을 확인할 수 있습니다.

max_num이 1씩 줄어들며 인스턴스의 개수를 카운트하고 있고 블로그의 랜덤행동이 실행할때마다 랜덤하게 실행되고 있음을 확인할 수 있습니다.

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기