zoukankan      html  css  js  c++  java
  • 通过元类规范接口自动化测试脚本:类名首字母大写、类及类下的方法必须有非空注释

    还在为接口脚本规范烦恼么?

    比如:

    类名定义不规范!

    定义的类缺少注释!

    函数名不规范!

    定义的函数缺少注释!

    而这些,都会大大降低脚本的可读性以及可维护性。

    ok,不管是写脚本的人忘了还是什么其它原因,我们可以通过元类来对脚本做出一些规范,代码如下:

    import types
    class Mymeta(type):  # 继承默认元类的一堆属性
        def __init__(self,class_name,class_bases,class_dic):
            # 类名首字母必须大写
            # if not class_name.istitle():  # 如果是ChinesePeople就不行
            if not (ord(class_name[0]) >=65 and ord(class_name[0])<=90):  # 只需要首字母在A-Z即可
                raise TypeError('类名【%s】的首字母必须大写'%class_name)
    
            # 类必须要有非空注释
            if '__doc__' not in class_dic or not class_dic['__doc__'].strip():
                raise TypeError('必须有注释,且注释不能为空')
    
            # 类中方法必须要有非空注释
            # print(class_dic)
            for k,v in class_dic.items():
                # print(k, v)
                if isinstance(v, types.FunctionType):
                    # print(v)
                    f = getattr(self, k)
                    if hasattr(f, '__doc__'):
                        # print(c.__doc__)
                        if not f.__doc__:
                            raise TypeError('方法【%s】必须有注释,且注释不能为空'%k)
    
            super(Mymeta,self).__init__(class_name,class_bases,class_dic)
    
        def __call__(self, *args, **kwargs): # 重写type类的__call__方法,obj=Chinese('jack',age=18)
            print(self) #self=Chinese
            print(args) #args=('jack',)
            print(kwargs) #kwargs={'age': 18}
    
    class Chinese(object,metaclass=Mymeta):
        '''
        中文人的类
        '''
        country='China'
    
        def __init__(self,namem,age):
            '''123'''
            self.name=namem
            self.age=age
    
        def talk(self):
            """talk方法"""
            print('%s is talking' %self.name)
    
    
    Chinese('jack',age=18) # Chinese.__call__(Chinese,'jack',18)
    

      

    是不是so easy呢?确实很easy。

  • 相关阅读:
    专职DBA-MySQL体系结构与基本管理
    JSON
    MIME类型
    文件上传下载
    response常用的方法
    2020.11.27小记
    HTTP请求状态码
    1561. Maximum Number of Coins You Can Get
    1558. Minimum Numbers of Function Calls to Make Target Array
    1557. Minimum Number of Vertices to Reach All Nodes
  • 原文地址:https://www.cnblogs.com/uncleyong/p/8616856.html
Copyright © 2011-2022 走看看