📅  最后修改于: 2020-01-18 14:58:46             🧑  作者: Mango
类方法
@classmethod装饰器是一个内置的函数装饰器,它是一个表达式,在定义函数后会对其求值。求值的结果使您的函数定义变得模糊。
类方法将类作为隐式第一个参数接收,就像实例方法接收实例
语法 :
class C(object):
@classmethod
def fun(cls, arg1, arg2, ...):
....
fun: 需要被转化成类方法的函数
returns: 类方法.
静态方法
静态方法不会收到隐式的第一个参数。
语法:
class C(object):
@staticmethod
def fun(arg1, arg2, ...):
...
returns: 一个静态方法
类方法与静态方法
什么时候使用什么?
如何定义一个类方法和一个静态方法?
要在Python中定义类方法,我们使用@classmethod装饰器。若要定义静态方法,我们使用@staticmethod装饰器。
让我们看一个例子,以了解它们之间的区别。假设我们要创建一个类Person。现在,Python不支持C++或Java之类的方法重载,因此我们使用类方法创建工厂方法。在下面的示例中,我们使用类方法从出生年份创建一个人员对象。
如上所述,我们使用静态方法来创建实用程序函数。在下面的示例中,我们使用静态方法来检查一个人是否成年。
例子:
# Python程序,展示类方法和静态方法
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)
# 静态方法
@staticmethod
def isAdult(age):
return age > 18
person1 = Person('logan', 21)
person2 = Person.fromBirthYear('logan', 1996)
print person1.age
print person2.age
# print the result
print Person.isAdult(22)
输出:
21
21
True