具有正常默认值的不可变结构

istruct的Python项目详细描述


collections.namedtuple之上构建的具有正常默认值的不可变结构

目标

  • 不可变的、类似字典的数据结构(注:^ {Tt2} $是{{EM1} $ < EEM > Python中现有的{TT3}$ $的不可变版本)
  • 最小值
  • 支持必需的可选字段(带默认值)
  • 严格禁止位置参数

安装

pip install istruct

快速启动

首先,创建一个名为personistruct对象,其中first_namelast_name必需的,而middle_namedobemail可选的(指定了默认值)。

>>> from istruct import istruct
>>> person = istruct("first_name", "last_name", middle_name="", dob="2000-01-01", email=None)

然后,使用first_namelast_namemiddle_name创建person的实例。

>>> p = person(first_name="Jim", last_name="Raynor", middle_name="Eugene")
>>> p
istruct(first_name='Jim', last_name='Raynor', email=None, dob='2000-01-01', middle_name='Eugene')

您可以像通常那样检索字段值。

>>> p.first_name
'Jim'
>>> p.dob
'2000-01-01'

p是不可变的,这意味着在创建后不能对其进行修改。因此,下面这样的set/delete操作将失败,引发一个AttributeError

>>> p.first_name = "James"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: can't set attribute
>>> del p.email
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: can't delete attribute

istruct只接受命名/关键字参数。它严格禁止按设计使用位置参数。

>>> p = person("Jim", "Raynor")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/microamp/src/microamp/istruct/istruct/__init__.py", line 52, in _istruct
    "(%d found)" % (len(positional),))
TypeError: No positional arguments are allowed in istruct (2 found)

istruct将在省略一个或多个必需的字段时引发TypeError

>>> p = person(last_name="Raynor")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/microamp/src/microamp/istruct/istruct/__init__.py", line 56, in _istruct
    return nt(**merge_dicts(kwargs, attrs))
TypeError: __new__() missing 1 required positional argument: 'first_name'

测试版本

  • python 2.7版
  • python 3.2
  • Python3.3
  • Python3.4
  • Python3.5
  • python 3.6
  • 皮比
  • PYPY3

待办事项

  • 找到注释类型的方法

许可证

麻省理工学院

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

推荐PyPI第三方库


热门话题
Java类之间并发性不一致的HashMap   插件如何在JavaSwing中使用UIManager和Classloader从外部jar安装外观?   java JasperReports:找不到子报表   在项目中找不到java生成的Javadoc文件   java BigDecimal。multiply()和divide()方法返回十六进制数。为什么?   java统计出现次数并从字符串中删除重复项   调用运算符时发生java NullPointerException   Spring和Hibernate之间的java配置错误   JavaZK将用户重定向回上一页   Javasocket为传出连接指定特定的网络接口   如果拖动到某个区域外,java Make按钮操作将被取消   如何在Eclipse for selenium 3.141.59中添加Java文档链接   java从匹配条件的数组中获取所有索引   docker未连接到RemoteWebDriver的java Gitlab ci selenium测试   java重写run方法   utf 8如何使用java解码UTF8编码的字符串?   java如何从eclipse调试部署在tomcat上的web应用程序?   将字母字符与前面没有百分号的Java正则表达式匹配