变种,一个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)。
===========================================
=--
`mutants`允许创建在访问时发生变化的python对象。
它通过创建代理对象
每个访问都有CTS。
``python
print(n)prints 2
print(n)#打印3
duck类:
feathers=true
def quack(self):
print('quack')
wolf类:
牙齿='sharp'
def quack(self):
print('no quack')
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)。