写点什么

软件测试 / 测试开发丨 Linux 三剑客与管道使用

作者:测试人
  • 2023-07-20
    北京
  • 本文字数:1550 字

    阅读完需:约 5 分钟

免费领取:测试资料+性能测试+接口测试+自动化测试+测试开发+测试用例+简历模板+测试文档

本文为霍格沃兹测试开发学社学员学习笔记分享

原文链接:https://ceshiren.com/t/topic/26292

内置类装饰器

  • 不用实例化、直接调用

  • 提升代码的可读性


普通方法

  • 定义:第一个参数为 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()
复制代码

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


实际案例

  • 代码实现的需求是格式化输出时间

  • 如果现在需求变更,输入 年、月、日 没法保证格式统一,可能是 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("此英雄不在英雄工厂当中")
复制代码


发布于: 刚刚阅读数: 3
用户头像

测试人

关注

专注于软件测试开发 2022-08-29 加入

霍格沃兹测试开发学社,测试人社区:https://ceshiren.com/t/topic/22284

评论

发布
暂无评论
软件测试 / 测试开发丨 Linux 三剑客与管道使用_Python_测试人_InfoQ写作社区