软件测试/测试开发丨Python 内置装饰器 学习笔记

news2025/4/22 2:55:58

内置类装饰器

  • 不用实例化、直接调用
  • 提升代码的可读性
内置装饰器含义
classmethod类方法
staticmethod静态方法

普通方法

  • 定义:

    • 第一个参数为self,代表 实例本身
  • 调用:

    • 要有实例化的过程,通过 实例对象.方法名 调用
# 1. 定义
class MethodsDemo:
    param_a = 0 #类变量
    def normal_demo(self): # 定义一个类方法,第一个参数必须为self
        """
        普通方法
        :return:
        """
        print("这是一个普通方法", self.param_a)
# 2. 调用
md = MethodsDemo()
md.normal_demo()

类方法

  • 定义:

    • 使用 @classmethod 装饰器,第一个参数为类本身,所以通常使用cls命名做区分(非强制)
    • 在类内可以直接使用类方法或类变量,无法直接使用实例变量或方法
  • 调用:

    • 无需实例化,直接通过 类.方法名 调用,也可以通过 实例.方法名 调用
# 1. 类的定义
class MethodsDemo:
    param_a = 0
    # 定义类方法必须加 classmethod装饰器
    @classmethod
    def classmethod_demo(cls):
        """
        类方法,第一个参数需要改为cls
        :return:
        """
        print("类方法", cls.param_a)

# 2. 类的调用
MethodsDemo.classmethod_demo() # 无需实例化,直接调用

静态方法

  • 定义:

    • 使用 @staticmethod 装饰器,没有和类本身有关的参数
    • 无法直接使用任何类变量、类方法或者实例方法、实例变量
  • 调用:

    • 无需实例化,直接通过 类.方法名 调用,也可以通过 实例.方法名 调用
    • 不能调用实例方法及实例变量
# 1. 定义
class MethodsDemo:
    param_a = 0
    @staticmethod
    def static_demo():
        """
        静态方法
        :return:
        """
        print("静态方法") # 无法直接调用类变量
# 2. 调用
MethodsDemo.static_demo()

普通方法、类方法、静态方法

名称定义调用关键字使用场景
普通方法至少需要一个参数self实例名.方法名()方法内部涉及到实例对象属性的操作
类方法至少需要一个cls参数类名.方法名()  或者实例名.方法名()@classmethod如果需要对类属性,即静态变量进行限制性操作
静态方法无默认参数类名.方法名()  或者实例名.方法名()@staticmethod无需类或实例参与

实际案例

  • 代码实现的需求是格式化输出时间
  • 如果现在需求变更,输入 年、月、日 没法保证格式统一,可能是json,可能是其他格式的字符串,在不修改构造函数的前提下,如何更改代码
class DateFormat:
    def __init__(self, year=0, month=0, day=0):
        self.year = year
        self.month = month
        self.day = day

    def out_date(self):
        return f"输入的时间为{self.year}年,{self.month}月,{self.day}日"

    @classmethod
    def json_format(cls, json_data):
        """
        输入一个字典格式的数据信息,返回 (2021, 1, 2)
        """
        year, month, day = json_data["year"], json_data["month"], json_data["day"]
        # return cls(year, month, day)
        return cls(year, month, day)


year, month, day = 2017, 7, 1

demo = DateFormat(year, month, day)
print(demo.out_date())  

json_date = {"year": 2021, "month": 12, "day": 24}
# 使用json格式化,生成想要的日期格式,返回DateFormat实例
demo = DateFormat.json_format(json_date)
print(demo.out_date())

静态方法实际案例

  • 此方法没有任何和实例、类相关的部分,可以作为一个独立函数使用
  • 某些场景下,从业务逻辑来说又属于类的一部分
  • 例子:简单工厂方法
# static 使用场景
class HeroFactory:
    # staticmethod 使用场景,
    # 方法所有涉及到的逻辑都没有使用实例方法或者实例变量的时候
    # 伪代码
    @staticmethod
    def create_hero(hero):
        if hero == "ez":
            return EZ()
        elif hero == "jinx":
            return Jinx()
        elif hero == "timo":
            return Timo()
        else:
            raise Exception("此英雄不在英雄工厂当中")

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

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

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

相关文章

自定义docker镜像,ubuntu安装命令并导出

文章目录 问题现象解决步骤相关命令详细介绍docker save 与 docker loaddocker import 与 docker exportdocker commit 问题现象 我们的通讯服务,需要监测前端设备的在线情况(是否在线、丢包率、延迟等),使用ping命令去实现此功能…

unity学习笔记----游戏练习03

一、修复植物种植的问题 1.当手上存在植物时,再次点击卡片上的植物就会在手上添加新的植物,需要修改成只有手上没有植物时才能再次获取到植物。需要修改AddPlant方法。 public bool AddPlant(PlantType plantType) { //防止手上出现多个植…

Python pandas 操作 excel 详解

文章目录 1 概述1.1 pandas 和 openpyxl 区别1.2 Series 和 DataFrame 2 常用操作2.1 创建 Excel:to_excel()2.2 读取 Excel:read_excel()2.2.1 header:标题的行索引2.2.2 index_col:索引列2.2.3 dtype:数据类型2.2.4 …

Java基础语法(注释,关键字,字面量,变量,数据类型,标识符,键盘录入,IDEA安装,类,模块,项目)

文章目录 day02 - Java基础语法1. 注释使用的技巧注意点 2. 关键字2.1 概念2.2 第一个关键字class 3. 字面量区分技巧 4. 变量4.1 什么是变量?4.2 变量的定义格式4.2.1 格式详解4.2.2 常用的数据类型4.2.3 变量的注意事项 4.3 变量的练习 5. 数据类型5.1 Java语言数…

YOLOv5算法进阶改进(9)— 引入ASPP | 空洞空间金字塔池化

前言:Hello大家好,我是小哥谈。ASPP是空洞空间金字塔池化(Atrous Spatial Pyramid Pooling)的缩写。它是一种用于图像语义分割任务的特征提取方法。ASPP通过在不同尺度上进行空洞卷积操作,从而捕捉到图像中不同尺度的上下文信息。ASPP的主要思想是在输入特征图上应用多个不…

High-Throughput Algae Cell Detection

一、数据集 About Dataset Microalgae, as an important natural resource, find widespread applications in various fields such as marine environments, biomedical research, clean energy, and food engineering. Monitoring the abundance and species composition of…

MFC消息机制详细剖析

易语言程序的破解99%的时候都需要用到FF55FC5F5E这个特征码 新建一个MFC应用程序: 去编辑MFC的.rc资源文件来DIY窗体 静态编译的,把很多静态库的代码都添加进去了 ,所以速度很慢 消息机制针对的是GUI程序(比如窗口程序&#xf…

51单片机项目(24)——基于51单片机的温控风扇protues仿真

1.功能设计 使用传感器测量温度,并将温度显示在LCD1602上。如果温度超过阈值,那么就打开风扇,否则风扇不打开。(仿真的时候,用直流电机模拟风扇)。 仿真截图如下: 此时温度是27度,我…

感染了后缀为.[sqlback@memeware.net].2700勒索病毒如何应对?数据能够恢复吗?

导言: 近期,[sqlbackmemeware.net].2700 勒索病毒成为网络安全的一大威胁。该勒索病毒采用高度复杂的加密算法,将用户文件加密并勒索赎金。了解该病毒的特征对于有效恢复被加密数据以及预防进一步感染至关重要。如果受感染的数据确实有恢复的…

私有部署ELK,搭建自己的日志中心(三)-- Logstash的安装与使用

一、部署ELK 上文把采集端filebeat如何使用介绍完,现在随着数据的链路,继续~~ 同样,使用docker-compose部署: version: "3" services:elasticsearch:container_name: elasticsearchimage: elastic/elasticsearch:7.9…

『精』CSS 小技巧之BEM规范

『精』CSS 小技巧之BEM规范 文章目录 『精』CSS 小技巧之BEM规范一、什么是BEM?二、BEM要怎么用?三、不用BEM会少个胳膊吗?💊四、Sass与BEM的结合🎈五、块与修饰符应放在一块👿参考资料💘推荐博…

Redis经典五大类型源码及底层实现(一)

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

年度总结|存储随笔2023年度最受欢迎文章榜单TOP15-part1

原创 古猫先生 存储随笔 2023-12-31 08:31 发表于上海 回首2023 2-8月份有近半年时间基本处于断更状态 好在8月份后小编没有松懈 (虽然2023年度总结,更像是近4个月总结) 本年度顺利加V啦! 感谢各位粉丝朋友的一路支持与陪伴 …

Linux之磁盘分区,挂载

Linux分区 分区介绍 对linux来说无论有几个分区,分给哪个目录使用,归根结底只有一个根目录,linux中每个分区都是用来组成整个文件系统的一部分。linux采用“载入"的处理方法,他的整个文件系统中包含一整套的文件和目录&…

osg::DrawElements*系列函数及GL_QUAD_STRIP、GL_QUADS绘制四边形效率对比

目录 1. 前言 2. osg::DrawElements*系列函数用法说明 3. GL_QUADS、GL_QUAD_STRIP用法及不同点 4. 效率对比 5. 总结 6. 参考资料 1. 前言 利用osg绘制图元,如:三角形、四边形等,一般用osg::PrimitiveSet类。其派生出了很多子类&#…

【网络安全 | Misc】miss_01 太湖杯

解压时提示输入密码: 如果 frFlags 或 deFlags 不为0会导致zip的伪加密 将deFlags的值修改为0 将9改为0,另存为123.zip: 即可绕过加密: 得到一个zip一个docx,但zip需要密码: 因此看docx有无敏感信息&#x…

面向对象基础-类与对象-封装

1、类与对象 1.1 概念 类:类是一个抽象的概念,用于描述一类对象的特点。 对象:根据类的概念所创造的实体。 【思考】一个对象可以没有对应的类嘛? 不可以,因为必须现有类才能创建对象。 1.2 类的内容 类中最基础的内容…

x-cmd pkg | fzf - 命令行模糊查找器

目录 简介首次用户功能特点竞品和相关作品进一步阅读 简介 fzf 是一个由 Go 编写的命令行模糊搜索工具,用于在大量文本数据中快速定位和选择内容,可以与任何列表一起使用(e.g. 文件、命令历史记录、进程、主机名、书签、git 提交等&#xff…

鲲志说:向我乘风破浪,好事多磨的2023致敬!(感恩有礼,感谢有你)

伴随着2023最后一个工作日的结束,也终于要给一年的工作划上一个结尾了,当然,也要给自己一个交代,给自己一个年度总结 2023年,大的挫折也是有的,但我相信好事多磨,总的来说是事业型的一年&#x…

华为ensp网络设计期末测试题-复盘

网络拓扑图 地址分配表 vlan端口分配表 需求 The device is running!<Huawei>sys Enter system view, return user view with CtrlZ. [Huawei]un in en Info: Information center is disabled. [Huawei]sys S1 [S1]vlan 99 [S1-vlan99]vlan 100 [S1-vlan100]des IT [S1-…