• python私有变量的操作函数生成


    python私有变量的操作函数生成

    作者:咕魂
    时间:2022年1月30日
    当使用python来写私有变量的模型类的时候,一个个写一个个改好累,然后我就稍微写了个小工具,可能有其他好用的IDE或者插件可以实现,有的话踢我一脚QwQ,我用的vscode
    如图预览:

    代码奉上:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>python模型代码生成</title>
        <style>
            body{
                padding: 0;
                margin: 0;
                background-color: #BEEDC7;
            }
            .box{
                padding: 20px;
                max- 800px;
                margin: auto;
            }
            .areabox{
                 100%;
                height: 500px;
                display: flex;
                flex-direction: row;
            }
            .areabox textarea{
                flex: 1;
                margin: 10px;
            }
            .radios{
                display: grid;
                grid: 30px 30px / 1fr 1fr 100px;
                text-align: center;
                margin: 0 50px;
            }
            .radios label{
                 200px;
                display: inline-block;
            }
        </style>
    </head>
    <body>
        <div class="box">
            <h1 style="text-align: center;">python模型代码生成</h1>
            <div class="radios">
                <div>
                    <input type="checkbox" name="init" checked>
                    <label>是否生成__init__函数</label>
                </div>
                <div>
                    <input type="checkbox" name="property" checked>
                    <label>是否生成@property函数</label>
                </div>
                <button onclick="handleCreate()">开始生成</button>
                <div>
                    <input type="checkbox" name="setter" checked>
                    <label>是否生成setter函数</label>
                </div>
                <div>
                    <input type="checkbox" name="toString" checked>
                    <label>是否生成toString函数</label>
                </div>
                <button onclick="handleClear()">清除内容</button>
            </div>
            <div class="areabox">
                <textarea id="intext"></textarea>
                <textarea id="outtext"></textarea>
            </div>
        </div>
    </body>
    <script>
        let inText = document.getElementById("intext")
        let outText = document.getElementById("outtext")
        let init = document.getElementsByName("init")[0]
        let property = document.getElementsByName("property")[0]
        let setter = document.getElementsByName("setter")[0]
        let toStr = document.getElementsByName("toString")[0]
        function handleCreate(){
            let strs = inText.value.split('\n')
            // 拼接操作方法
            let output = ""
            // 此步必须在拼接构造函数和toString方法之前
            let tags = []
            // 如果没有操作方法,那么根据需求生成公开属性
            let pubStr = ""
            for(let item of strs){
                item = item.replace(/\s*/g,"")
                if(item==""){
                    output +='\n'
                    continue
                }
                // 保留注释
                if(item[0]=='#' || (item[0]=='/' && item[1]=='/')){
                    if(property.checked || setter.checked){
                        output += item
                        output +='\n'
                    }else{
                        pubStr += item
                        pubStr +='\n'
                    }
                    continue
                }
                // 压栈属性
                tags.push(item)
                // 拼接property函数
                if(property.checked){
                    output += 
                    "@property\n"+
                    "def "+item+"(self):\n"+
                    "    return self.__"+item+"\n"
                }
                // 拼接setter函数
                if(setter.checked){
                    output += 
                    "@"+item+".setter\n"+
                    "def "+item+"(self,value):\n"+
                    "    self.__"+item+" = value\n"
                }
                // 拼接公开属性,当不生成两种操作函数时
                if(!property.checked && !setter.checked){
                    if(pubStr == "")pubStr = "# 公开属性\n"
                    pubStr += 
                    item + " = None\n"
                }else{
                    output += '\n'
                }
            }
            if(pubStr != "")pubStr += '\n'
            // 拼接构造函数
            let initStr = ""
            if(init.checked){
                initStr =
                "# 构造函数\n"+
                "def __init__(self,\n"+
                tags.join(",\n")+"\n"+
                ") -> None:\n"
                for(let item of tags){
                    initStr += 
                    "    self.__"+item+" = "+item+"\n"
                }
                initStr += '\n'
            }else{
                initStr = ""
            }
            // 拼接toString函数
            let toStrs = ""
            if(toStr.checked){
                let toStrList = []
                for(let item of tags){
                    toStrList.push("    "+item+"={self.__"+item+"}")
                }
                toStrs = 
                "def toString(self):\n"+
                '    return f"""\n'+
                toStrList.join(",\n")+".\n"+
                '    """\n'
            }
            outText.value = pubStr + initStr + output + toStrs
        }
        function handleClear(){
            inText.value = ""
            outText.value = ""
        }
        function initData(){
            inText.value = `//序号\nid\n#名字\nname\nage`
            handleCreate()
        }
        initData()
    </script>
    </html>
    
  • 相关阅读:
    模电电路分析
    正式答辩提问
    Dockerfile
    Docker常用命令
    docker镜像与容器
    Docker容器与容器数据
    docker命令自动安装
    Docker与虚拟机
    Java Lambda表达式 Stream
    Java Lambda表达式
  • 原文地址:https://www.cnblogs.com/guhunjun/p/15857599.html
Copyright © 2020-2023  润新知