# 파이썬 장고 실무 심화 5주차 12강. staticMethod에 대한 코드.
# 작성일/인 : 2023년 8월 21일 (월). 김성우
from datetime import date

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    # a class method to create a Person object by birth year.
    @classmethod
    def fromBirthYear(cls, name, year):
        return cls(name, date.today().year - year )

    # a static method to check if a Person is adult or not.
    @staticmethod
    def isAdult(age): # self 가 들어가지 않는 것이 특이점.
        return age > 18

    def display(self):
        print(self.name + "의 나이 : " + str(self.age) + "입니다")

person1 = Person('사람1', 21) # 인스턴스 생성 후
person1.display()

person2 = Person.fromBirthYear('사람2', 1992) # 인스턴스 생성하지 않고, 클래스메서드로
person2.display()

print(person1.isAdult(22))
print(person1.isAdult(15))
print(person1.isAdult(32))

static method 를 Person 클래스 안에 메서드로 넣은 이유

  1. Person 클래스의 종류에 해당되기 때문에.

  2. 일반 함수

    def isAdult(age): # self 가 들어가지 않는 것이 특이점. return age > 18

    로 만들어도 되지만, 일부러 Person 안에 넣어서 코드의 간결함을 위함

  3. 유틸리티(기능성)를 위해서. 클래스 안에 있는 기능성 메서드로 정의.