在 Python 中使用@staticmethod装饰器定义静态方法
2023-09-17 22:17:54
@staticmethod
是一个内置的装饰器,它在 Python 中的类中定义一个静态方法。
静态方法不会接收任何引用参数,无论它是由类的实例还是由类本身调用的。
@staticmethod特性(@staticmethod Characteristics)
- 声明类中的静态方法。
- 它不能有
cls
或self
参数。 - 静态方法无法访问类属性或实例属性。
- 静态方法可以使用
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()
方法声明为静态方法。
请注意,它不能有self
或cls
参数。
静态方法可以使用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() 调用它。 |
它可用于声明返回类对象的工厂方法。 | 它可以返回类的对象。 |
本文内容总结: