具有内置python对象的主题定向或优化

时间:2013-02-18 22:40:16

标签: python python-3.x scope roles lookup

目标: 使用仅在特定上下文中有效的角色扩展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:我为普通的python类编写了100行代码,但是对于内置函数我增加了250行,并且看不到完整的解决方案。

我无法为内置对象创建自定义类,因为我可以将纯python类创建为link:Alink:B。 这是因为编译器将它们放在任何地方:

>>> test.__code__.co_consts
(None, 1, 2, 3, (3,), 3)

我无法在带有列表的代码对象中进行替换,因为它们是在代码中构建的。

这些是我的问题,因为我无法估计它:

  • 我有什么地方可以查找内置对象来用包装器替换它们,以便我可以为它们添加角色?

  • C扩展程序会帮我修补属性查找,这样我就可以为布尔值制作角色

  • 我需要编译自己的python才能使这个想法有效吗?

  • 还有另一种解决方案吗?

编辑1

这是我的一个使用案例:1 .successor.successor == 3。 我希望能够轻松拥有不会干扰整个程序的小域名=保持班级苗条。

例如,我想让数字可调用以创建lambda演算。

我想要瘦的类和特殊用例我想通过角色扩展它们,所以我可以调用它们的自定义函数。 我最后会在Data-Context-Interaction和面向上下文的编程之间出现一些东西。

2 个答案:

答案 0 :(得分:0)

您能否提供有关您的用例的更多信息?我想你想研究元类但不确定没有更多关于你的特定需求的信息。如果你想替换内置组件,我认为有些错误或太聪明。

答案 1 :(得分:0)

我想你想看看抽象基类:

http://docs.python.org/3/library/abc.html