Python中的Classmethod()
Python有一个内置的函数叫classmethod(),它可以给出一个指定函数的类方法。
语法
classmethod( function )
参数: 该方法接受函数的名称作为其参数。
返回类型: 该方法返回转换为类方法的函数。
我们也可以使用装饰器形式@classmethod来定义classmethod。
语法
@classmethod<
def function(cls, arg1, arg2, arg3...):
其中。
函数: 这是需要被转换为类方法的函数
返回: 该函数转换后的类方法。
classmethod()函数不是绑定在一个实例上,而是绑定在类上。类和对象都能够调用类的方法。类和对象都可以用来调用这些方法。
类方法与静态方法
尽管静态方法不需要特别的参数,但类方法接受cls作为它的第一个参数。
尽管静态方法不能访问或改变类的状态,但类方法可以。
静态方法通常不知道类的状态。它们是实用方法,在接收到一些参数后对它们进行操作。另一方面,类必须是类方法的一个参数。
Python的@classmethod装饰器和@staticmethod装饰器分别用来生成类方法和静态方法。
Python 中 classmethod 的例子
这个例子将展示如何创建一个简单的 classmethod。
在这个插图中,我们将学习如何构造一个类方法。为了做到这一点,我们做了一个叫做 Python 的类,其中有一个叫做课程的变量和一个叫做 algo 的方法,这个方法可以打印传递给它的对象。
然后我们在将方法Python.algo传入classmethod后,调用了类的函数algo,而没有构造函数对象,这就将方法转化为类方法。
代码
# Python program to show how to create a simple classmethod function
# Defining a function
class Python:
course = 'Algorithm'
def algo(object_):
print("This is an algorithm: ", object_.course)
# Creating a classmethod function by passing a method to it
Python.algo = classmethod(Python.algo)
Python.algo()
输出
This is an algorithm: Algorithm
使用classmethod()函数创建一个类方法
代码
# Python program to show how to create a classmethod function
# Creating a class
class Names:
# creating a variable
name = "Javatpoint"
# creating a method
def print_name(object_):
print("The given name is: ", object_.name)
# Before writing this line, print_name(), make the print name classmethod. It can only be called with an object, not the class.
Names.print_name = classmethod(Names.print_name)
# Now the print_name method can be called a classmethod
Names.print_name()
输出
The given name is: Javatpoint
使用类方法的工厂方法
工厂设计模式在使用类名而不是对象来调用几个函数时,使用classmethod()函数。
代码
# Python program to show the use of a class method and a static method
# Importing the required library
from datetime import date
# Creating a class
class Student:
def __init__(self, name, age):
self.name = name
self.age = age
# Using the class method decorator to make the years of alumni class a class method class
# Creating a class method.
@classmethod
def alumniYear(cls, name, year):
return cls(name, date.today().year - year)
# Creating a static method to check whether the student is an adult or not
@staticmethod
def isAdult(age):
return age > 21
# Creating an instance of the class
person1 = Student('Harry', 22)
person2 = Student.alumniYear('Louis', 1999)
print(person1.age)
print(person2.age)
# print the result
print(Student.isAdult(22))
输出
22
24
True