面向主题或完善与内建的Python对象(Subject Oriented or Refinement

2019-08-17 01:33发布

目标:扩展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 。 我想使它容易有不与整个计划地干扰=保持苗条类小域。

例如,我想使调用创建演算数字。

我想拥有纤细的类和特殊用途情况下,我想通过角色来扩展它们,所以我可以叫他们自定义的功能。 我之间到底什么数据上下文的交互和面向环境的规划应该出来。

Answer 1:

你能提供你的用例一些信息呢? 我想你想寻找到元类,但不知道没有您的具体需要更多的信息。 我觉得有什么不对,或者如果你想更换建宏太聪明。



Answer 2:

我想你想看看抽象基类:

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



文章来源: Subject Oriented or Refinements with builtin python objects