python的装饰器详解

目录

一:介绍

二:在方法中使用

三:在类中使用

四: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")

相关推荐
丁浩6662 分钟前
Python机器学习---2.算法:逻辑回归
python·算法·机器学习
yudiandian201416 分钟前
02 Oracle JDK 下载及配置(解压缩版)
java·开发语言
要加油哦~22 分钟前
JS | 知识点总结 - 原型链
开发语言·javascript·原型模式
B站_计算机毕业设计之家24 分钟前
计算机毕业设计:Python农业数据可视化分析系统 气象数据 农业生产 粮食数据 播种数据 爬虫 Django框架 天气数据 降水量(源码+文档)✅
大数据·爬虫·python·机器学习·信息可视化·课程设计·农业
Q_Q51100828537 分钟前
python+uniapp基于微信小程序的旅游信息系统
spring boot·python·微信小程序·django·flask·uni-app·node.js
鄃鳕39 分钟前
python迭代器解包【python】
开发语言·python
new coder40 分钟前
[c++语法学习]Day10:c++引用
开发语言·c++·学习
驰羽1 小时前
[GO]GORM 常用 Tag 速查手册
开发语言·后端·golang
Narcissiffo1 小时前
【C语言】str系列函数
c语言·开发语言
workflower1 小时前
软件工程与计算机科学的关系
开发语言·软件工程·团队开发·需求分析·个人开发·结对编程