📅  最后修改于: 2020-04-07 09:56:06             🧑  作者: Mango
类方法
@classmethod装饰器是一个内置的函数装饰器,它是一个表达式,在定义函数后会对其求值。
类方法将类作为隐式第一个参数接收,就像实例方法接收实例语法一样:
class C(object):
@classmethod
def fun(cls, arg1, arg2, ...):
....
fun: function that needs to be converted into a class method
returns: a class method for function.
静态方法不会收到隐式的第一个参数。
语法:
class C(object):
@staticmethod
def fun(arg1, arg2, ...):
...
fun: 需要转换为类方法的函数
returns: 函数fun的静态方法
类方法与静态方法
什么时候使用什么?
如何定义一个类方法和一个静态方法?
要在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
# 类方法,创建一个Person对象
@classmethod
def fromBirthYear(cls, name, year):
return cls(name, date.today().year - year)
# 静态方法,检查Person是否成年
@staticmethod
def isAdult(age):
return age > 18
person1 = Person('mayank', 21)
person2 = Person.fromBirthYear('mayank', 1996)
print person1.age
print person2.age
# print the result
print Person.isAdult(22)
输出
21
21
True