目录
一:介绍
二:在方法中使用
三:在类中使用
四:python自带的装饰器
一:介绍
Python的装饰器是一种高阶函数,它允许你在不改变函数内部逻辑的情况下,给函数添加额外的功能。装饰器本质上是一个接受函数对象作为参数,返回一个新的函数对象的可调用对象(通常是函数或类)。下面我们详细介绍下装饰器的应用
二:在方法中使用
定义一个装饰器方法
def my_decorator(func):  
     def wrapper():  
         print("Before function call")  
         func()  
         print("After function call")  
     return wrapper  
   
在别的方法中使用装饰器
 @my_decorator  
 def say_hello():  
     print("Hello!")  
   
 # 调用装饰后的函数  
 say_hello()
三:在类中使用
定义一个装饰器方法
def my_decorator(func):
     def wrapper(*args, **kwargs):
         print("Before function call")
         result = func(*args, **kwargs)
         print("After function call")
         return result
return wrapper
在类中使用
 class MyClass:
     @my_decorator
     def my_method(self):
         print("Inside my_method")
# 创建类的实例并调用方法
 obj = MyClass()
 obj.my_method()
四:python自带的装饰器
1:@property
是一个内置的装饰器,用于将一个方法转换为属性。使用@property装饰器可以将方法的调用转换为属性访问,这样可以更加方便地访问和修改对象的属性值。使用@property装饰器的方法通常被称为getter方法,因为它用于获取属性的值。你还可以使用@<attribute_name>.setter装饰器来
2:@<attribute_name>.setter
定义一个setter方法,用于设置属性的值。setter方法需要接受一个参数,用于指定要设置的属性值。
下面是一个简单的示例,演示了如何使用@property和@<attribute_name>.setter装饰器:
class Person:
     def __init__(self, name):
         self._name = name
    @property
     def name(self):
         return self._name
    @name.setter
     def name(self, new_name):
         if not isinstance(new_name, str):
             raise ValueError("Name must be a string")
         self._name = new_name
person = Person("Alice")
 print(person.name)  # 输出: Alice
 person.name = "Bob"
 print(person.name)  # 输出: Bob
3:@classmethod
在Python中,@classmethod是一个内置的装饰器,用于将一个方法声明为类方法。类方法是一种特殊的方法,它需要使用类本身作为第一个参数(通常命名为cls),并且可以访问类和实例的属性。
使用@classmethod装饰器可以将一个方法转换为类方法,这样该方法就可以通过类名直接调用,而不是通过类的实例调用。类方法通常用于定义与类本身相关的方法,而不是与类的实例相关的方法。
下面是一个简单的示例,演示了如何使用@classmethod装饰器:
class MyClass:
     @classmethod
     def my_classmethod(cls, arg1, arg2):
         # 这里是类方法的实现
         return arg1 + arg2
         pass
print(MyClass.my_classmethod("Hello", "World"))
4:@staticmethod
在Python中,@staticmethod是一个内置的装饰器,用于将一个方法声明为静态方法。静态方法不需要类的实例就可以调用,并且不能访问类或实例的属性。
使用@staticmethod装饰器可以将一个方法转换为静态方法,这样该方法就可以通过类名直接调用,而不需要通过类的实例调用。静态方法通常用于定义与类本身相关的方法,而不是与类的实例相关的方法。
下面是一个简单的示例,演示了如何使用@staticmethod装饰器:
class MyClass:
     @staticmethod
     def my_static_method(arg1, arg2):
         # 这里是静态方法的实现
         return arg1+arg2
         pass
MyClass.my_static_method("Hello", "World")
