变种,一个python库,用于访问时发生变异的对象

mutants的Python项目详细描述


变体,一个对象的python库,该库在访问时发生变化
===========================================




=--
`mutants`允许创建在访问时发生变化的python对象。
它通过创建代理对象
每个访问都有CTS。


----
``python





print(n)prints 1
print(n)prints 2
print(n)#打印3



duck类:
feathers=true


def quack(self):
print('quack')



wolf类:
牙齿='sharp'

def quack(self):
print('no quack')


返回随机。选择([duck(),wolf())

randy=突变体。不可变突变体(随机动物)
randy.quack();打印"呱呱"或"不呱呱"
randy.quack();打印"呱呱"或"不呱呱"
打印(hasattr(randy,"羽毛")打印"真"或"假"
randy.name="ra"ndy'
print(hasattr(randy,'name'))prints'false',请参见下面的


def class撸u toggler(animal):
如果是instance(animal,duck):
return wolf
return duck

tracy=mutants.classhoppermutat(duck(),class撸toggler)
tracy.quack()#当它是狼时打印"no quack"
tracy.quack();当它是鸭时打印"quack"
打印(tracy.tooths)<35;当它是狼时打印"sharp"
tracy.name="tracy"
打印(tracy.name)


def class撸u extender(动物):
类sleepyanimal(动物类):
def quack(自我):
super().quack()
print('zzz')
return sleepyanimal

zetta=突变体。类hoppermutant(duck(),类扩展器)
zetta.quack();打印"quack"和"zzz"
```



详细信息
----
根据您的需要,您可以选择
两种突变类型之一:ImmutableTransition和ClassyMutat
或自定义OnAccessTransition。

OnAccessTransition是库的核心类。
uch与wrapt.objectproxy类似。
但是在每次访问之前都会调用一个回调函数
,它能够修改或替换代理对象。

用法:`onaccessmutation(初始对象,可调用mutator)`
,其中:`callable mutator(包装对象)->;new\u包装对象`

immutablevariant

"immutablevariant"可以模拟不同的对象。
它的构造函数接受一个可调用的。
在每次访问之前,调用这个可调用的对象是为了提供一个"immutablevariant"将模拟的对象。

用法:`immutablevariant(callable_returning_objects-to-u-be-proxied)`

/>def immutabletransition(mutator):
return onaccesstransition(none,lambda:mutator())
````
为了提高性能,未来的c扩展可能单独实现它。


就像"obj.\uu class\uuu=callable_returning_a_class()`,
但是在每次操作对象之前都会神奇地发生。

用法:`variant.classhopper(initial_object,callable_returning_a_class)`

在这个纯python实现中,它被实现为:
``python
def classhoppernatrant(初始对象,类返回可调用,copy=true):

如果拷贝:

def class_mutator(obj):
obj.\uu class_uuu returning_callable(obj)
return obj

s.



更多关于突变体的信息
----
"突变体"的诞生是为了满足另一个库的需要,有助于修改对象、函数或类行为,
堆叠这些修改
,并随时轻松切换"当前活动的修改堆栈"。
请查看:https://github.com/t184256/hacks

"变种"与"wrapt.object proxy"或"lazy object proxy"类似,但有缺陷和灵活性,而不是懒惰、缓存和性能。
cpython/python伙计们,请给我们一些更干净的东西来完成我们的技巧!

"突变体"当前处于alpha状态,
因此,如果有东西损坏,请发送pull请求!



许可证
----
`变体'是根据麻省理工学院许可证的条款分发的;
请参见[license.txt](license.txt)。

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

推荐PyPI第三方库


热门话题
java Spring数据JPA+Hibernate在不首先找到父实体的情况下保存子实体   php Java:如何从CLI接收命令   spring为java中的导出数据创建访问文件   java在Windows 8.1上安装Play Framework   java Spring启动白标签错误页面(类型=未找到,状态=404)   java如何在单击时从数组中绘制?   java fn:substringAfter()上次出现   java在IFR语句中使用方法返回   java onPause()或onStop()的名称   对关联对象的关联对象具有条件的java HQL查询   java只打印一次总值,无需迭代   java如何使用抽象Uri buildOn()方法?   如何在Java中执行sudo命令并获得错误输出?   java反射:避免对getConstructor(类<?>…)的未经检查的警告调用作为原始类型类的成员   Java:如何从类中创建的对象调用类方法?   java如何在电子邮件中嵌入图像?   java如何在Android上启用详细GC?   java什么是串行版本id?