获取对象的python_冻结引用。

frozenobj的Python项目详细描述


冻结

冻结创建对对象的不可变引用这可以(懒洋洋地)递归地工作:可变成员在访问时也会被冻结。它使原始对象保持可变,返回一个代理类,该类的行为与对象一样,只是不可编辑。如果基础对象发生更改,代理将自动反映这一点。因此,它是不可变的,因为引用不能用来更改它,而不是根本不能更改它(当然,您可以放弃原始的可变引用)。冻结的对象不能用作字典键。

安装

  1. pip安装frozenobj
  2. 利润

用法

用法很简单:

from frozenobj import frozen
immutable_obj = frozen(mutable_obj)

举个简单的例子:

class Cls:
        def __init__(self):
                self.li = [37, 42]
original = Cls()
freezered = frozen(original)
original.li.append(99)   # works
freezered.li.append(99)  # ImmutableError

查看tests.py以获取更多示例。

注释

  • 有人真的决定改变你的代理对象可以找到这样做的方法。这不是一个安全措施,它只是一种强制你的界面的方式(在纯粹想象的情况下,人们不阅读或遵循手册说他们不应该改变事情)
  • 它应该适用于大多数对象。它适用于类、类实例、模块、列表、集合、词典以及从中派生的某些类型。它隐式地为int、浮点、字符串和元组工作,它们总是不可变的(它们是返回的,不是代理的)。函数和方法也被认为是常数
  • frozen方法是等幂的,并使用缓存:如果在同一对象上连续或并行调用两次,则获得相同的代理
  • 访问时的递归冻结虽然不是完全免费的,但应该具有相当低的计算成本(您只需要存储多次访问的值)。
  • 很大程度上依赖于lazy-object-proxy包,这很好。

许可证

冻结在修订的bsd许可下可用,请参阅license.txt。你可以做任何事情,只要你包括许可证,不要用我的名字来推广,并知道没有保证

欢迎加入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正则表达式匹配