Python classmethod 和 staticmethod 的使用

from datetime import date


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

#  类本身的方法,和类的实例无关,可以理解绑定了类。
# 重构类的时候不必要修改构造函数,只需要额外添加你要处理的函数。
    @classmethod
    def date_of_birth(cls, name, year):
        """
        根据出生年份计算出年龄
        """
        return cls(name, date.today().year - year)

# 静态方法无绑定, 没有默认输入参数,类和类实例也可以直接调用,相当于一个普通的函数。
    @staticmethod
    def isAdult(age):
        """
        判断是否成年
        """
        if age > 18:
            return 'Adult'
        else:
            return 'Minor'


if __name__ == '__main__':
    man1 = Person.date_of_birth('Tony', 2000)  
    man2 = Person('Alex', 19)
    print(man1.age)      #19
    print(man2.age)      #19
    print(Person.isAdult(10))     #'Minor'
    print(man1.isAdult(21))       #'Adult'

你可能感兴趣的:(Python classmethod 和 staticmethod 的使用)