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-width: 800px;
margin: auto;
}
.areabox{
width: 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{
width: 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>

python私有变量的操作函数生成的更多相关文章

  1. Python 私有变量的访问和赋值

    首先我们这里先描述下: Python中,变量名类似__x__的,以双下划线开头,并且以双下划线结尾的,是特殊变量,特殊变量是可以直接访问的(比如 __doc__, __init__等),不是priva ...

  2. Python 私有变量中两个下划线 _ _item 与 一个下划线的区别 _item

    python中没有常量的说法, 但是可以通过元组实现一个常量 在python的私有变量中, 存在两个下划线 _ _item 与一个下划线 _item 的区别 前面带两个下划线的私有变量: 只能在本类中 ...

  3. [python] 私有变量和私有方法

    1.在Python中要想定义的方法或者变量只在类内部使用不被外部调用,可以在方法和变量前面加 两个 下划线 #-*- coding:utf-8 -*- class A(object): name = ...

  4. python学习 变量的操作 与 基本数据类型

    一变量(本文使用python3.5): #变量:是计算机内存中的一块区域,变量可以存储规定范围内的值,变量可以改变#在python中变量是计算机内存中数据的引用 python的变量没有明显的类型,具体 ...

  5. Private Variable and Private Method - Python 私有变量 和 私有方法

    Private Variable and Private Method Python 不象 Java 那样, 通过 private 关键字创建私有属性, python 通过更简洁的实现了'私有属性', ...

  6. Python私有变量

    # 访问限制的保护,代码更加健壮 class Student(object): def __init__(self,name,score): self.__name= name self.__scor ...

  7. python私有变量的分类

  8. Python私有变量(Private Variable)

    Variables can be private which can be useful on many occasions. A private variable can only be chang ...

  9. Python类中的 私有变量和私有方法

    默认情况下,Python中的成员函数和成员变量都是公开的(public),在python中没有类似public,private等关键词来修饰成员函数和成员变量.在python中定义私有变量只需要在变量 ...

  10. Python的私有变量与装饰器@property的用法

    Python的私有变量是在变量前面加上双横杠(例如:__test)来标识, Python私有变量只能在类内部使用,不被外部调用,且当变量被标记为私有后,调用时需再变量的前端插入类名,在类名前添加一个下 ...

随机推荐

  1. Win 下 创建 Python 虚拟环境

    主要是记录一个 用虚拟环境打包的坑, Virtualenv 不如自带的 venv 香. 需求 最近要对一个 tkinter 小程序打包为 exe. 毕竟业务人员是绝对不可能安装开发环境的. 不论你怎么 ...

  2. 网络编程:反应堆_I/O模型和多线程模型实现

    多线程设计的几个考虑 在反应堆reactor框架设计中,main reactor线程是一个acceptor线程,这个线程一旦创建,会以event_loop形式阻塞在event_dispatcher的d ...

  3. Pycomcad快速绘制参数化多段线的一种方法

    任务: 绘制出不同长度的相同型式的多段线,如上图所示,仅仅是300mm和500mm的区别,3个弯折处都一样,都是圆弧段,对于常规二次开发思路,是通过数学计算,计算出圆弧的圆心的位置,用固定的半径,绘制 ...

  4. .NET 10 进展之 CoreCLR Interpreter

    我们从前一阵子 Maui 几个被离职的Mono 工具链相关的微软员工来说起,通过现象看本质,这意味着.NET 10 将完成对Mono的完全替代..NET 10 特性中有一个 @dotnet/runti ...

  5. Faray 数列问题

    首先,Farey 数列 \(F_n\) 表示分母不超过 \(n\) 的所有既约真分数按大小顺序排列的集合,形式化来说 \[F_n = \left\{\frac{p}{q} \bigg\vert 0 & ...

  6. 在Ubuntu上使用Let's Encrypt配置Nginx SSL证书并自动更新

    在Ubuntu上使用Let's Encrypt配置Nginx SSL证书并自动更新 绪言 这篇文章其实内容不多,难度不大,只是自己记录一下. Arisu拷打了我几次我在阿里云上花钱购买SSL证书一事. ...

  7. PicGo使用简明教程及踩坑记录

    PicGo使用简明教程及踩坑记录 PicGo使用 我现在用的博客的记录方式是Typora+PicGo+阿里云oss,这一套配置好后就非常方便了,可以快捷上传图片到云服务器,并且阿里云的速度也是我试过的 ...

  8. 1分钟了解 GPT-1到GPT-3 演化过程

    在研发ChatMoney这款产品的时候,我开始深入研究GPT的诞生,逐记录下来分享给大家. 前言 Generative Pre-trained Transformer(GPT)系列是由OpenAI开发 ...

  9. AI接口实现:简单实现Viper配置管理

    简介 前面实现的一个简易suno-api.是使用cookie来获取suno-token发起请求的.当时并没有通过配置的方式来获取cookie,而是直接在代码中写死了cookie的值,这种做法并不好,所 ...

  10. 鸿蒙运动项目开发:封装超级好用的 RCP 网络库(中)—— 错误处理,会话管理与网络状态检测篇

    鸿蒙核心技术##运动开发## Remote Communication Kit(远场通信服务) 在上篇中,我们介绍了 RCP 网络库的核心功能,包括请求参数的封装.响应内容的转换以及拦截器与日志记录机 ...