【问题标题】:Importing Classes Within a Module在模块中导入类
【发布时间】:2011-02-11 14:25:42
【问题描述】:

目前,我有一个包含多个可以协同工作的类的解析器。

例如:TreeParser 创建多个 Product 和 Reactant 模块,这些模块又创建多个 Element 类。 TreeParser 由同一模块内的渲染方法调用,该方法从导入器调用。

最后,如果包有依赖项(例如 re 和同一文件夹中的另一个模块),那么哪里是需要这些模块的最佳位置?在__init__.py 文件中还是在模块本身中?

编辑:

当导入模块的一部分调用模块内的另一个def时,如果没有导入,你如何调用那个def?

lib/toolset.py => def add(){ toolset.show("I'm Add"); } def show(text){print text};

如果从 main.py => import lib.toolset 调用该文件,则不会加载 show 方法,或者 main.py => from lib.toolset import show 将不起作用。

import toolset 可以放在toolset.py 的顶部吗?

【问题讨论】:

    标签: python namespaces module


    【解决方案1】:

    我认为这是您问题中的关键陈述。

    我真的不想在每次调用类之前添加模块名称

    我的回答:我听到你在说什么,但这是 Python 的标准做法。

    任何阅读诸如“result = match(blah)”之类的代码的 Python 程序员都会假定您在自己的模块中调用本地函数。如果您实际上是在谈论 re 模块中的函数 match(),他们会期望看到“result = re.match(blah)”。就是这样。

    如果有帮助的话,当我第一次接触 Python 时,我也不喜欢这种风格,但现在我很感激它消除了我正在调用的许多称为“匹配”的函数中的哪一个的歧义,尤其是当我来的时候回去阅读我六个月前写的代码。

    【讨论】:

      【解决方案2】:

      我不太确定你的问题是什么,你只是想少打字吗?

      • 获得一个不错的带有自动完成功能的源代码编辑器!
      • 您可以使用import longmodulename as ln 并使用ln.something 而不是longmodulename.something
      • 你可以from longmodulename import ( something, otherthing )直接使用something

      import * 从来都不是一个好主意,它会与编码工具混淆,无声无息地中断,让读者想知道东西是被定义的等等......

      【讨论】:

      • 如何知道整个模块是否被导入?是否有某种 self 指向当前模块?
      • 没有(合理的)方法可以知道模块是如何导入的,也没有理由让任何人都需要知道这一点。你想做什么?
      猜你喜欢
      • 2011-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多