在本文中,我们将介绍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 静态方法:
class C(object): @staticmethod def fun(arg1, arg2, ...): ... returns: a static method for function fun.
类方法和静态方法的区别是:
要在Python中定义类方法,我们使用@classmethod装饰器,要定义静态方法,我们使用@staticmethod装饰器。 让我们看一个例子来理解它们之间的区别。假设我们要创建一个 Person 类。现在,Python 不支持像C++或Java 那样的方法重载,因此我们使用类方法来创建工厂方法。在下面的示例中,我们使用类方法从出生年份创建一个人对象。
如上所述,我们使用静态方法来创建实用函数。在下面的示例中,我们使用静态方法来检查一个人是否是成年人。
一个简单的例子:
类方法:
class MyClass: def __init__(self, value): self.value = value def get_value(self): return self.value # Create an instance of MyClass obj = MyClass(10) # Call the get_value method on the instance print(obj.get_value()) # Output: 10
输出
10
静态方法:-
class MyClass: def __init__(self, value): self.value = value @staticmethod def get_max_value(x, y): return max(x, y) # Create an instance of MyClass obj = MyClass(10) print(MyClass.get_max_value(20, 30)) print(obj.get_max_value(20, 30))
30 30
下面是完整的实现
# 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
辅助空间: O(1)
原文链接:codingdict.net