Python中的Classmethod()

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Python 教程