目标:扩展abitrary类,但只是在一定的范围内有效的作用。
这工作:
# from https://github.com/niccokunzmann/wwp/blob/master/C_builtinTypes.py
from relative import roleOf, useRoles
@roleOf(int)
class NaturalNumber:
# int gets successor only in this module
@property
def successor(self):
return 1 + self
@roleOf(tuple)
@roleOf(list)
class MyList:
@property
def first(self):
return self[0]
@useRoles
def test():
# this is possible if we recompile the code objects
i = 1
print(type(i))
assert i.successor == 2
assert i.successor.successor == 3
assert isinstance(i, int) # EDIT3 works
# check for identity
t = (3,)
assert t.first == 3
l = list()
l.append(3)
assert l.first == 3 # this assertion fails
assert l.first == 2 + 1
if __name__ == '__main__':
test()
我的问题:
EDIT2:我写了100行对普通的Python类,使这项工作代码,但我建宏加入250行并没有看不到完整的解决方案。
我不能为内置对象创建自定义类,因为我可以用纯Python类的链接:一个或链接:乙 。 这是因为编译器把它们无处不在:
>>> test.__code__.co_consts
(None, 1, 2, 3, (3,), 3)
我不能这样做在代码的对象替换名单,因为它们是内置的代码。
这是我的问题,因为我无法估计它:
什么是我要寻找的对象内置使用包装来取代他们,所以我可以添加的角色给他们的地方?
将一个C的扩展帮我修补属性查找,所以我可以为角色布尔
我需要编译我自己的Python实现这一设想的工作?
有另一种解决方案?
编辑1
这是我的使用情况之一: 1 .successor.successor == 3
。 我想使它容易有不与整个计划地干扰=保持苗条类小域。
例如,我想使调用创建演算数字。
我想拥有纤细的类和特殊用途情况下,我想通过角色来扩展它们,所以我可以叫他们自定义的功能。 我之间到底什么数据上下文的交互和面向环境的规划应该出来。