추상화

codakcodak·2023년 10월 3일
0

OOP python

목록 보기
3/19
post-custom-banner

classmethod

class Robot:
    # 클래스 변수:인스턴스들이 공유하는 변수
    population = 0

    def __init__(self, name, code):
        self.name = name  # 인스턴스 변수
        self.code = code  # 인스턴스 변수
        Robot.population += 1

    # 인스턴스 메서드
    def say_hi(self):
        print(f"Hi!,my master call me {self.name}")

    # 인스턴스 메서드
    def cal_add(self, a, b):
        return a + b

    # 인스턴스 메서드
    def die(self):
        print(f"{self.name} is being destroyed")
        Robot.population -= 1
        if Robot.population == 0:
            print(f"{self.name} was last one.")
        else:
            print(f"There are still {Robot.population} robots working.")

    # 클래스 메서드
    @classmethod
    def how_many(cls):
        print(f"We have {cls.population} robots")


print(Robot.population)
siri = Robot("Siri", 1234123)
jarvis = Robot("jarvis", 5231535)
bixby = Robot("bixby", 50310433)
print(Robot.population)

Robot.how_many()
  • 데코레이터 classmethod를 통해 클래스 변수를 생성할 수 있다.
  • 인스턴스 변수 및 인스턴스 메서드는 각각의 인스턴스 고유의 공간에 생성된 것이다.
  • 클래스,인스턴스를 통해 접근 할 수 있다.(인스턴스로 접근시instance.class.method 형식)

staticmethod

class StaticMethod:
    @staticmethod
    def print_name(name):
        return "내 이름은 {} 입니다.".format(name)


# 클래스를 통해서 호출가능
print(StaticMethod.print_name("minsoo"))
#내 이름은 minsoo 입니다.

# 인스턴스를 통해서도 호출이 가능
me = StaticMethod()
print(me.print_name("minsoo"))
#내 이름은 minsoo 입니다.
  • cls(클래스),self(인스턴스)를 인자로 받지 않는다.
  • 클래스,인스턴스를 통해 접근 할 수 있다.
profile
숲을 보는 코더
post-custom-banner

0개의 댓글