Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用内置python对象进行面向主题或优化_Python_Python 3.x_Scope_Roles_Lookup - Fatal编程技术网

使用内置python对象进行面向主题或优化

使用内置python对象进行面向主题或优化,python,python-3.x,scope,roles,lookup,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

目标: 使用仅在特定上下文中有效的角色扩展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类作为或那样为内置对象创建自定义类。 这是因为编译器将它们放在任何地方:

>>> test.__code__.co_consts
(None, 1, 2, 3, (3,), 3)
我不能用列表替换代码中的对象,因为它们是在代码中构建的

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

  • 我需要在哪些地方寻找内置对象来用包装器替换它们,以便向它们添加角色

  • C扩展是否可以帮助我修补属性查找,这样我就可以为布尔人创建角色

  • 我需要编译自己的python来实现这个想法吗

  • 还有别的解决办法吗

编辑1

这是我的一个用例:
1.succession.succession==3
。 我想让它更容易拥有不干扰整个程序的小域=保持类的苗条

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

我希望拥有slim类,对于特殊用例,我希望通过角色扩展它们,以便可以对它们调用自定义函数。
最后,应该会有一些介于面向上下文编程和面向上下文编程之间的东西出现。

您能提供一些关于您的用例的更多信息吗?我认为您希望研究元类,但如果没有关于您的具体需求的更多信息,则无法确定。如果你想替换内置的,我认为这是错误的或者太聪明了。

我认为你想研究抽象基类:


第33分钟的演讲很有帮助,我真的很想用内置设备实现这一点。它与usal类配合得很好,但我认为内置是必不可少的。用这种方式改变内置设备也可能是个坏主意。如果可以显式地包装它们就可以了。
assert-isinstance(i,int)
已经对我起作用了。你对我在那里能找到什么帮助有具体的想法吗?我知道这个概念,但看不出它应该如何应用。这只在
\uu isinstance\uuu
方面对我有帮助,但在tuplei中添加新函数时没有帮助,如果你想更改由文字创建的对象的类型;您可能需要即时重写源代码,例如,查看如何