Python中的类方法与静态方法

Python中的类方法与静态方法

在本文中,我们将介绍Python中的类方法和静态方法之间的基本区别,以及何时在Python中使用类方法和静态方法。

什么是Python中的类方法

@classmethod装饰器是一个内置的函数装饰器,它是一个表达式,在函数定义后进行计算。求值的结果会影响函数定义。类方法以隐式的第一个参数接收类,就像实例方法接收实例一样

Python类方法:

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.
  • 类方法是绑定到类而不是类对象的方法。
  • 它们可以访问类的状态,因为它接受一个指向类而不是对象实例的类参数。
  • 它可以修改适用于所有类实例的类状态。例如,它可以修改一个适用于所有实例的类变量。

什么是Python中的静态方法

静态方法不接收隐式的第一个参数。静态方法也是绑定到类而不是类对象的方法。此方法不能访问或修改类状态。它出现在类中是因为方法出现在类中是有意义的。

Python静态方法:

class C(object):
    @staticmethod
    def fun(arg1, arg2, ...):
        ...
returns: a static method for function fun.

类方法vs静态方法

Class方法和静态方法的区别是:

  • 类方法将cls作为第一个参数,而静态方法不需要特定的参数。
  • 当静态方法不能访问或修改类状态时,类方法可以访问或修改类状态。
  • 通常,静态方法对类状态一无所知。它们是实用程序类型的方法,接受一些参数并在这些参数上工作。另一方面,类方法必须有class作为参数。
  • 我们在python中使用@classmethod装饰器来创建类方法,在python中使用@staticmethod装饰器来创建静态方法。

什么时候使用类或静态方法

  • 我们通常使用类方法来创建工厂方法。工厂方法为不同的用例返回类对象(类似于构造函数)。
  • 我们通常使用静态方法来创建实用函数。

如何定义类方法和静态方法

要在python中定义类方法,我们使用@classmethod装饰器,要定义静态方法,我们使用@staticmethod装饰器。
让我们看一个例子来理解两者之间的区别。假设我们想创建一个类Person。现在,python不像c++或Java那样支持方法重载,所以我们使用类方法来创建工厂方法。在下面的例子中,我们使用一个类方法从出生年份创建一个person对象。

如上所述,我们使用静态方法来创建实用函数。在下面的例子中,我们使用静态方法来检查一个人是否为成年人。

下面是完整的实现

# Python program to demonstrate
# use of class method and static method.
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):
        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
25
True

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程