1、 @staticmethod
将方法装饰为静态方法,可以在不创建类实例的情况下直接调用
代码示例:
class MyClass:
@staticmethod
def my_static_method():
print("This is a static method.")
MyClass.my_static_method() # 直接调用静态方法
2、@classmethod
将方法装饰为类方法,可以在不创建类实例的情况下操作类属性和调用类方法
代码示例:
class MyClass:
class_variable = "Hello"
@classmethod
def my_class_method(cls):
print(cls.class_variable)
MyClass.my_class_method() # 调用类方法
3、@property
将方法装饰为属性方法,使其可以像访问属性一样访问
代码示例
class Circle:
def __init__(self, radius):
self._radius = radius
@property
def radius(self):
return self._radius
@radius.setter
def radius(self, value):
self._radius = value
c = Circle(5)
print(c.radius) # 访问属性方法
c.radius = 7 # 设置属性方法
4、 @wraps
@classmethod 和 @staticmethod 是用于装饰类的方法的装饰器,而 @wraps 是一个用于装饰函数的装饰器,它用于保留被装饰函数的元数据(如函数名、文档字符串等)
代码示例
from functools import wraps
def my_decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
print("Before function call")
result = func(*args, **kwargs)
print("After function call")
return result
return wrapper
@my_decorator
def my_function():
"""This is my function"""
print("Inside the function")
my_function()
print(my_function.__name__) # 输出函数名:my_function
print(my_function.__doc__) # 输出文档字符串:"This is my function"