在 Python 中使用@staticmethod装饰器定义静态方法

2023-09-17 22:17:54

@staticmethod是一个内置的装饰器,它在 Python 中的类中定义一个静态方法。 静态方法不会接收任何引用参数,无论它是由类的实例还是由类本身调用的。

@staticmethod特性(@staticmethod Characteristics)

  • 声明类中的静态方法。
  • 它不能有clsself参数。
  • 静态方法无法访问类属性或实例属性。
  • 静态方法可以使用ClassName.MethodName()调用,也可以使用 object.MethodName() 调用。
  • 它可以返回类的对象。

下面的示例演示如何在类中定义静态方法:

示例: Define Static Method

class Student:
    name = 'unknown' # class attribute
    
    def __init__(self):
        self.age = 20  # instance attribute
    @staticmethod
    def tostring():
        print('Student Class')

上面,Student类使用 @staticmethod 修饰器将 tostring() 方法声明为静态方法。 请注意,它不能有selfcls参数。

静态方法可以使用ClassName.MethodName()object.MethodName()调用,如下所示。

示例: Calling Static Method

#calling static method    
Student.tostring()   #'Student Class'
Student().tostring() #'Student Class'
std = Student()
std.tostring()     #'Student Class'

静态方法无法访问类属性或实例属性。如果尝试这样做,它将引发错误。

示例: Static Method

class Student:
    name = 'unknown' # class attribute
    
    def __init__(self):
        self.age = 20  # instance attribute
    @staticmethod
    def tostring():
        print('name=',name,'age=',self.age)
Student.tostring()   #error

@classmethod vs @staticmethod

下表列出了class method方法和静态方法之间的区别:

@classmethod@staticmethod
声明一个类方法。声明静态方法。
它可以访问类属性,但不能访问实例属性。它无法访问类属性或实例属性。
可以使用ClassName.MethodName()object.MethodName()调用它。可以使用ClassName.MethodName()object.MethodName()调用它。
它可用于声明返回类对象的工厂方法。它可以返回类的对象。

本文内容总结: