将某些数据类字段设置为只读

partial-readonl的Python项目详细描述


部分只读

partial_readonly提供一个decorator,用于方便地使数据类中的某些字段只读。除了python标准库之外,没有其他依赖项。

用法

快速启动

使用partail_readonly,通过创建与之相关的属性,我们可以轻松地将dataclass中的某些字段设置为只读。(注意:我们仍然不能将origin字段设置为只读,因为在调用__init__时仍需要设置它)

例如,下面的代码

fromdataclassesimportdataclass@dataclassclassData:id:int=0name:str=''@propertydeffull_name(self):returnself.name

可以使用partial_readonly

这样写
fromdataclassesimportdataclass@dataclassclassData:id:int=0_name:'str alias=full_name'=''

详细信息

  1. 通过添加下划线前缀将字段标记为只读
    • _id: int表示id是只读的
  2. 默认情况下,名为like field的相对属性没有下划线前缀
    • _id: int将生成名为id的属性
  3. 使用字符串注释并在末尾添加alias=alias_you_want,您将拥有一个名为alias_you_want的属性。
    • _id: 'int alias=security_id将生成名为security_id的属性

安装

要安装partial_readonly,只需使用pip

pip install partial_readonly

或者使用easy_install

easy_install partial_readonly

深入

  1. 通过设置getter[并禁止setter]将属性设置为只读
  2. 使用ast为新属性生成getter
  3. 滥用注释的想法来自zmitchell/annotation-abuse

为什么部分只读

最新的python为我们提供了数据类,以便以方便的方式创建一些类。

但如果我们不希望所有字段都是只读的,那就不方便了。

要求

  • python=3.7

后记

我做这个是为了练习ast和发布。

我认为它工作得很好。

有一些更容易实现。

如果你分享一些关于这个功能的想法,我会很高兴的!

许可证

MIT License

Copyright (c) 2018 book987

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何使用Array和ArrayList做同样的事情?   用户界面使Java JScrollpane仅垂直滚动   查找字符串中最长的重复子字符串所需的算法Java函数?   java我想在listview中检索firebase数据   java如何使用Jsoup提取链接?   java 安卓。看法使用RTEditor时发生充气异常   maven为什么自动依赖是错误版本?(java.lang.ClassNotFoundException:org.junit.jupiter.api.MethodOrderContext)   使用apachespark进行java开发   java glDrawBuffers是否应该翻转IntBuffer?   java在添加回调之前完成CompletableFuture<T>   用Java构建搜索树   java将web应用程序部署到Heroku   active directory Java LDAP:属性为只读   启动Spring启动应用程序时未考虑java DB端口   使用Mockito的java模拟   C++从运行时运行java的过程。执行出口代码139   javascript使用脚本删除旧SonarQube项目   java代理每节点模型?   java无法在Android上通过Internet从PC服务器接收UDP数据   在bluemix:java上加载p12时发生ibm云错误。木卫一。IOException:数据不足