Python 中的类方法是什么?
内置函数修饰符 @classmethod 是一个表达式,在你的函数定义之后立即被评估。这种评估结果会掩盖你的函数定义。类似于实例方法接收实例一样,类方法也将类作为隐式的第一个参数。
Python 类方法的语法:
下面是在 Python 中使用类方法的语法:
class ClassName(object):
@classmethod
def 方法(cls, arg1, arg2, ...):
....
返回值:
它返回一个函数的类方法。
类方法的特性
- 类方法是附加到类本身而不是类的对象的方法。
- 因为它接收指向类而不是对象实例的类参数,所以它们可以访问类的状态。
- 它具有改变类状态的能力,这会影响类的每个实例。例如,它可以更改会影响所有实例的类变量。
Python 中的静态方法是什么?
静态方法是与类绑定而不是类的对象绑定的方法。不能将隐式的第一个参数传递给静态方法。这种方法无法访问或更改类的状态。将方法放在类中是因为在类中拥有该方法是有意义的。
Python 静态方法的语法:
下面是在 Python 中使用静态方法的语法:
class ClassName(object):
@staticmethod
def method(arg1, arg2, ...):
....
返回值:
它返回一个函数的静态方法。
静态方法与类方法的区别
类方法和静态方法之间的区别如下所述。
- 静态方法不需要特定的参数,而类方法以 cls 作为其第一个参数。
- 静态方法无法访问或修改类的状态,而类方法可以。
- 静态方法通常不了解类的状态。它们是在接收参数后对一些参数进行操作的实用方法。另一方面,类方法必须是类的参数。
- Python 的 @classmethod 修饰符和 @staticmethod 修饰符分别用于创建类方法和静态方法。
何时使用类方法和静态方法
- 要创建工厂方法,我们通常使用类方法。对于各种用例,工厂方法返回类对象,类似于构造函数。
- 要创建实用函数,我们经常使用静态方法。
如何定义和使用类方法和静态方法
为了定义类方法,我们使用 @classmethod 修饰符;为了定义静态方法,我们使用 @staticmethod 修饰符。
为了更好地理解它们,让我们看一个例子,其中我们使用了类方法和静态方法。
例子:使用类方法和静态方法
from datetime import date
class Vehicle:
def __init__(self, name, tyre):
self.name = name
self.tyre = tyre
@classmethod
def checkBike(cls, name):
if(name=="Bike"):
return cls(name, 2)
@staticmethod
def isCar(name):
return name == "Car"
vehicle1 = Vehicle.checkBike('Bike')
vehicle2 = Vehicle('Car', 4)
print(vehicle1.tyre)
print(vehicle2.tyre)
print(Vehicle.isCar("Car"))
输出:
2
4
True
总结
相信看完之后大家已经理清楚了这两个方法的区别了,从两个方法的定义不难看出,staticmethod更适合定义工具及类中通用的方法和函数;而classmethod更适合定义和类及类的实例有关的方法,比如类的创建。
好了,希望经过今天的学习,大家对于Python的理解更上一层楼。