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。

  • 相关阅读:
    提高代码质量:如何编写函数
    如何写自我评价
    写简历注意事项
    Android开发注意细节
    Android:onNewIntent()触发机制及注意事项
    Atom与markdown
    Java程序性能优化总结
    Java中的继承与组合
    Fragment生命周期总结
    C# 生成随机姓名
  • 原文地址:https://www.cnblogs.com/uncleyong/p/8616856.html
Copyright © 2011-2022 走看看