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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/627937.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

剖析setinterval用法

1 基本语法 JavaScript&#xff1a;setInterval() 用法详解_js setinterval-CSDN博客 setInterval() 是 JavaScript 中的一个内置函数&#xff0c;它用于在指定的间隔时间内重复执行一段代码&#xff0c;实现周期性操作。该函数的语法如下&#xff1a; setInterval(function…

2024年浙江省高新技术企业申报的条件和各地区的奖励补贴

浙江省高新技术企业奖励补贴 1、舟山市高新技术企业奖励 对新认定的国家高新技术企业&#xff0c;每家给予20万元奖励。 定海区 对新认定的高新技术企业&#xff0c;一次性给予30万元的专项补助&#xff1b;对有效期内的高新技术企业在工业企业绩效评价中可给予提档。 普陀…

【C++进阶】心心念念的红黑树,它来了!

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法 ✈️专栏&#xff1a;C航路 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&#x1…

Spring框架是如何解决Bean创建过程中的循环依赖问题的

引言 本文主要梳理了Spring框架Bean创建过程中应对循环依赖问题的相关源码。我在手写super-mini-webpackhttps://blog.csdn.net/q1424966670/article/details/135628531?spm1001.2014.3001.5502的时候也介绍过解决循环依赖的算法&#xff1a;Map记忆化搜索。可以猜测这段源码…

ACL【新华三与华为的区别】

【解释】acl简单点解释就是&#xff0c;一套根据需求而设置的规则 【背景】 192.168.1.0/24 网段不允许访问 192.168.2.0/24 网段&#xff0c;要求使用基本 ACL 实现20_1 可以访问 20_6 的 TELNET 服务&#xff0c;但不能访问 FTP 服务 【操作步骤】 {易混点 }&#xff1a;1. …

STL常用容器—string容器

STL常用容器—string容器 string基本概念string初始化及赋值1. 构造函数原型2. 字符串赋值3. 字符串拼接 string字符存取&#xff08;遍历&#xff09;字符串的查找和替换字符串比较string取子串字符串删除和插入string与char *类型的转化 string基本概念 本质&#xff1a; s…

机器学习周刊第六期:哈佛大学机器学习课、Chatbot Ul 2.0 、LangChain v0.1.0、Mixtral 8x7B

— date: 2024/01/08 — 吴恩达和Langchain合作开发了JavaScript 生成式 AI 短期课程&#xff1a;《使用 LangChain.js 构建 LLM 应用程序》 大家好&#xff0c;欢迎收看第六期机器学习周刊 本期介绍10个内容&#xff0c;涉及Python、机器学习、大模型等,目录如下&#xff…

Miracast手机高清投屏到电视(免费)

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl Miracast概述 Miracast是一种无线显示标准&#xff0c;它允许支持Miracast的设备之间通过Wi-Fi直接共享音频和视频内容&#xff0c;实现屏幕镜像或扩展显示。这意味着你可以…

C++常用类

1、QString 字符串类 QString 是Qt的字符串类&#xff0c;与C的std::string相比&#xff0c;不再使用ASCII编码。QString使用的Unicode编码。 QString 完全支持中文&#xff0c; 但是由于不同的技术可能会采用不同的编码。有时候也会遇到中文编码的一致性问题。 如果后续的学习…

PointMixer: MLP-Mixer for Point Cloud Understanding

Abstract MLP-Mixer 最近崭露头角,成为对抗CNNs和Transformer领域的新挑战者。尽管相比Transformer更为简单,但通道混合MLPs和令牌混合MLPs的概念在图像识别任务中取得了显著的性能。与图像不同,点云本质上是稀疏、无序和不规则的,这限制了直接将MLP-Mixer用于点云理解。为…

i18n多国语言Internationalization的实现

i18n 是"Internationalization”的缩写&#xff0c;这个术语来源于英文单词中首尾字母“”和“n”以及中间的字符数(共计18个字符) 当我们需要开发不同语言版本时&#xff0c;就可以使用i18n多国语言的一个操作处理&#xff0c;i18n主要实现那一方面的内容呢&#xff1f;…

项目压测优化实践思路

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring原理、JUC原理、Kafka原理、分布式技术原理、数据库技术&#x1f525;如果感觉博主的文章还不错的…

BGP防环机制介绍

点赞 关注&#xff0c;持续更新&#xff01;&#xff01;&#xff01;&#xff01; BGP防环机制有以下两种&#xff08;此处不谈带RR的场景&#xff09;&#xff1a; 一、AS_PATH 在AS之间实现BGP环路的防范&#xff0c;从EBGP邻居得到路由时&#xff0c;检查该路由的AS_PA…

日本樱岛火山喷发遥感卫星影像监测

日本樱岛火山喷发监测 当地时间2024年1月9日15时许&#xff0c;位于日本九州地区鹿儿岛县的樱岛南岳山顶火山口&#xff0c;开始喷发&#xff0c;火山烟雾从火山口上升至空中1200米左右。目前&#xff0c;日本气象厅将樱岛的火山警戒级别维持在3级&#xff0c;限制民众入山。 火…

前端浮点和16进制互转

一、浮点转16进制数据 //浮点数转16进制 function singleToHex(t) {if (t "") {return "";}t parseFloat(t.substr(0, 4));if (isNaN(t) true) {return "Error";}if (t 0) {return "00000000";}var s,e,m;if (t > 0) {s 0;}e…

HCS私有云简介

1、HCS简介和发展史 华为云产品&#xff1a;私有云和公有云&#xff0c;现在的私有云已经和公有云越来越像了FusionSphere是华为的一个品牌2016年&#xff0c;在5.0版本的时候&#xff0c;华为Openstack叫FusionSphere Openstack 5.0&#xff0c;底层用的是suse操作系统&#…

整数因子分解问题(分治法欧拉线性筛素数)

问题描述&#xff1a; 大于1 的正整数n 可以分解为&#xff1a;nx1*x2*…*xm。 例如&#xff0c;当n12 时&#xff0c;共有8 种不同的分解式&#xff1a; 1212&#xff1b; 126*2&#xff1b; 124*3&#xff1b; 123*4&#xff1b; 123*2*2&#xff1b; 122*6&#xff1…

BitLocker 驱动器加密

BitLocker 简介 BitLocker 驱动器加密是一项由微软开发并集成在Windows操作系统中的数据保护功能&#xff0c;其主要作用是通过加密存储在硬盘驱动器上的数据来增强信息安全。具体来说&#xff1a; 数据安全&#xff1a;BitLocker可以对整个操作系统卷&#xff08;包括系统分区…

开源图床Lychee本地如何部署并结合内网穿透工具实现远程访问

文章目录 1.前言2. Lychee网站搭建2.1. Lychee下载和安装2.2 Lychee网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4.公网访问测试5.结语 1.前言 图床作为图片集中存放的服务网站&#xff0c;可以看做是云存储的一部分&#xff0c;既可…

酒店订房小程序源码系统:帮您打造类似美团的酒店模式的小程序 带完整的安装部署教程

随着移动互联网的快速发展&#xff0c;小程序已经成为一种新型的应用形态&#xff0c;为各大行业提供了更加便捷的服务。其中&#xff0c;酒店预订小程序作为一种方便快捷的预订方式&#xff0c;备受用户青睐。小编给大家分享一款酒店订房小程序源码系统&#xff0c;旨在帮助您…