python 常用的装饰器
时间: 2025-01-07 15:41:22 浏览: 3
### Python 中常用的装饰器及其用法
#### @property 装饰器
`@property` 装饰器用于将类的方法转换为只读属性访问,使得可以通过点运算符直接调用方法而无需加括号。这有助于简化代码并增强可读性。
```python
class Person:
def __init__(self, name):
self._name = name
@property
def name(self):
return self._name
person = Person('Alice')
print(person.name) # 输出 Alice
```
此段代码展示了 `@property` 的基本应用方式[^4]。
#### @staticmethod 和 @classmethod 装饰器
这两个装饰器分别用来定义静态方法和类方法。静态方法不需要实例化对象即可调用;类方法则接收隐式的第一个参数 `cls` 表示当前类本身。
```python
from datetime import date
class Student:
def __init__(self, name, age):
self.name = name
self.age = age
@staticmethod
def is_adult(age):
return age >= 18
@classmethod
def from_birth_year(cls, name, birth_year):
current_year = date.today().year
age = current_year - birth_year
return cls(name, age)
student_1 = Student.from_birth_year('Bob', 2000)
print(student_1.is_adult(23)) # True
```
上述例子说明了如何利用这两种类型的特殊成员函数来扩展类的功能。
#### 自定义通用装饰器
除了内置的几种外,还可以创建自定义的一般性装饰器应用于任何普通函数上增加额外行为而不改变原逻辑结构:
```python
def my_decorator(func):
def wrapper():
print("Something is happening before the function is called.")
func()
print("Something is happening after the function is called.")
return wrapper
@my_decorator
def say_hello():
print("Hello!")
say_hello()
# Something is happening before the function is called.
# Hello!
# Something is happening after the function is called.
```
这段程序解释了一个简单的自定义装饰器是如何工作的[^5]。
阅读全文