Odoo中文社区可以通过以下三个域名访问:shine-it.net , odoocn.org,odoo.net.cn

原论坛用户的基本信息和发帖这里都予以保留,请注意:原论坛用户无需重新注册新用户,但是您的密码需要重置

开发人员可以登录gitter讨论组: http://gitter.im/odoo-china/Talk, 需要github账号

如果您登录系统碰到问题,请在微信公众号留言:

OpenERP与Python 元编程



  • 学习.. 好深奥....

    校长. 我想如果使用 metaclass 是不是就是我一直想要的一个东西 的方向?
    我想根据一段代码(string) 生成一个 import 后的 module 对象?



  • 赞 深入技术贴


  • 管理员

    [quote author=mrshelly link=topic=5771.msg14289#msg14289 date=1361832208]
    校长. 我想如果使用 metaclass 是不是就是我一直想要的一个东西 的方向?
    我想根据一段代码(string) 生成一个 import 后的 module 对象?
    [/quote]
    哈哈,看看Tim Peters 的回答!  “如果你拿不准是否应该用到它时,你不需要它“
    不过,好象真的用不到metaclass,下面的代码是不是你想要的? 但是,Python牛人们告诫我们,尽量不要用eval, exec等,那是既不安全又丑陋的,mrshelly就好这口没办法。
    [code]code = """
    x = 100
    class A(object):
        def init(self, y):
            print('x=%s' % x)
            print('y=%s' % y)
            """
    import imp
    mymodule = imp.new_module('mymodule')
    exec code in mymodule.dict

    In [41]: mymodule.A(2)
    x=100
    y=2
    Out[41]: <mymodule.A at 0x2e6c110>
    [/code]



  • 哇, 这个必须顶 ...

    谢谢....



  • 刚刚又 Google  到一种方法

    [code]

    code = '''
    x = 100
    class A(object):
        def init(self, y):
            print('x=%s' % x)
            print('y=%s' % y)
    '''
    import types
    m = types.ModuleType('test_m')
    exec code in m.dict

    import sys
    sys.modules['test_m'] = m
    [/code]

    然后  import test_m 就OK了.

    总结一下, 就是 使用 imp.new_module 或者  types.ModuleType 可以生成一个 module object 然后  再给 这个 object 添加 代码里的方法,属性

    添加的方法, 主要使用 exec 来玩

    再记录一下, 由 pyc 文件加载的代码

    [code]

    import marshal
    import types

    b = open('test_m.pyc', 'rb').read()
    code = marshal.loads(b[8:])
    m = types.ModuleType('test_m')
    exec code in m.dict

    sys.modules['test_m'] = m

    #test
    import test_m

    [/code]

    除了 exec 不爽点之外. 其他比较完美...
    code object 似乎也只能使用 exec 来导入到模块 object 中...



  • 看了您的大作之后,欲罢不能,看了好几个小时代码,加上自己的理解。

    也得一文 OpenERP 模块动态加载原理及启动代码分析 http://buke.github.com/blog/2013/02/26/openerp-dynamic-loading-and-booting-way/

    请斧正 ~    ;D




  • 管理员

    :D 都是魔法师啊


  • 管理员

    [quote author=wangbuke link=topic=5771.msg14298#msg14298 date=1361879273]
    看了您的大作之后,欲罢不能,看了好几个小时代码,加上自己的理解。

    也得一文 OpenERP 模块动态加载原理及启动代码分析 [url=http://buke.github.com/blog/2013/02/26/openerp-dynamic-loading-and-booting-way/]http://buke.github.com/blog/2013/02/26/openerp-dynamic-loading-and-booting-way/[/url]

    请斧正 ~    ;D
    [/quote]
    把真正的强人引出来了,@wangbuke是OpenERP中文社区贡献高质量代码最多的人,文档协作组织者之一,他的强文一定要看。我在文章里卖的那个“以后再讨论”的关子,buke已清晰表达,还有更多学习热点。



  • 不错哇,比较深奥,搞python的教程都不教的东西。



  • mark


登录后回复
 

与 Odoo 中文社区 的连接断开,我们正在尝试重连,请耐心等待