跳转至内容
  • 版块
  • 标签
  • 热门
  • 用户
  • 群组
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(Flatly)
  • 不使用皮肤
折叠

Odoo 中文社区

  1. 主页
  2. 版块
  3. Odoo 开发与实施交流
  4. OpenERP与Python 元编程

OpenERP与Python 元编程

已定时 已固定 已锁定 已移动 Odoo 开发与实施交流
12 帖子 7 发布者 21.5k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • mrshellyM 离线
    mrshellyM 离线
    mrshelly
    写于 最后由 编辑
    #3

    学习.. 好深奥....

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

    1 条回复 最后回复
    0
    • J 离线
      J 离线
      janden
      写于 最后由 编辑
      #4

      赞 深入技术贴

      1 条回复 最后回复
      0
      • digitalsatoriD 离线
        digitalsatoriD 离线
        digitalsatori 管理员
        写于 最后由 编辑
        #5

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

        code = &quot;&quot;&quot;<br />x = 100<br />class A(object):<br />&nbsp; &nbsp; def __init__(self, y):<br />&nbsp; &nbsp; &nbsp; &nbsp; print(&#039;x=%s&#039; % x)<br />&nbsp; &nbsp; &nbsp; &nbsp; print(&#039;y=%s&#039; % y)<br />&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;<br />import imp<br />mymodule = imp.new_module(&#039;mymodule&#039;)<br />exec code in mymodule.__dict__<br /><br />In [41]: mymodule.A(2)<br />x=100<br />y=2<br />Out[41]: &lt;mymodule.A at 0x2e6c110&gt;<br />
        

        【上海先安科技】(tony AT openerp.cn)

        1 条回复 最后回复
        0
        • mrshellyM 离线
          mrshellyM 离线
          mrshelly
          写于 最后由 编辑
          #6

          哇, 这个必须顶 ...

          谢谢....

          1 条回复 最后回复
          0
          • mrshellyM 离线
            mrshellyM 离线
            mrshelly
            写于 最后由 编辑
            #7

            刚刚又 Google  到一种方法

            <br /><br />code = &#039;&#039;&#039;<br />x = 100<br />class A(object):<br />&nbsp; &nbsp; def __init__(self, y):<br />&nbsp; &nbsp; &nbsp; &nbsp; print(&#039;x=%s&#039; % x)<br />&nbsp; &nbsp; &nbsp; &nbsp; print(&#039;y=%s&#039; % y)<br />&#039;&#039;&#039;<br />import types<br />m = types.ModuleType(&#039;test_m&#039;)<br />exec code in m.__dict__<br /><br />import sys<br />sys.modules&#91;&#039;test_m&#039;] = m<br />
            



            然后  import test_m 就OK了.

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

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

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

            <br /><br />import marshal<br />import types<br /><br />b = open(&#039;test_m.pyc&#039;, &#039;rb&#039;).read()<br />code = marshal.loads(b[8:])<br />m = types.ModuleType(&#039;test_m&#039;)<br />exec code in m.__dict__<br /><br />sys.modules&#91;&#039;test_m&#039;] = m<br /><br />#test<br />import test_m<br /><br />
            



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

            1 条回复 最后回复
            0
            • W 离线
              W 离线
              wangbuke
              写于 最后由 编辑
              #8

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

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

              请斧正 ~    ;D



              1 条回复 最后回复
              0
              • JoshuaJ 离线
                JoshuaJ 离线
                Joshua 管理员
                写于 最后由 编辑
                #9

                😄 都是魔法师啊

                【上海先安科技】(joshua AT openerp.cn),欢迎关注公众号:openerp_cn

                1 条回复 最后回复
                0
                • digitalsatoriD 离线
                  digitalsatoriD 离线
                  digitalsatori 管理员
                  写于 最后由 编辑
                  #10

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

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

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

                  【上海先安科技】(tony AT openerp.cn)

                  1 条回复 最后回复
                  0
                  • G 离线
                    G 离线
                    gotham
                    写于 最后由 编辑
                    #11

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

                    1 条回复 最后回复
                    0
                    • M 离线
                      M 离线
                      mf1389004071
                      写于 最后由 编辑
                      #12

                      mark

                      1 条回复 最后回复
                      0

                      • 登录

                      • 没有帐号? 注册

                      • 登录或注册以进行搜索。
                      • 第一个帖子
                        最后一个帖子
                      0
                      • 版块
                      • 标签
                      • 热门
                      • 用户
                      • 群组