【问题标题】:Import a class variable from another module从另一个模块导入类变量
【发布时间】:2012-02-06 02:46:07
【问题描述】:

我正在尝试从另一个模块导入一个类中的一个变量:

import module.class.variable 
# ImportError: No module named class.variable

from module.class import variable 
# ImportError: No module named class

from module import class.variable
# SyntaxError: invalid syntax (the . is highlighted)

我可以执行以下操作,但我更愿意只导入我需要的一个变量。

from module import class as tmp
new_variable_name = tmp.variable
del tmp

这可能吗?

【问题讨论】:

    标签: python import


    【解决方案1】:
    variable = __import__('module').class.variable 
    

    【讨论】:

    • 我认为这将导入整个模块是否正确?等价于import module 然后variable = module.class.variable ?
    • 除非它不会将任何名称绑定到导入的模块。这很好; from module import clazz 也“导入整个模块”,以完全相同的方式。根本没有办法解决这个问题。如果没有模块的其余部分上下文,则无法保证类定义有意义,对于类的属性也是如此。
    • @Alex 将始终导入 whole 模块(但这取决于您的声明 what 将在您的脚本范围内可用)。 from x1 import x2 将加载 x1,然后在 x2 范围内或作为子包查找 x2 的位置。
    【解决方案2】:

    你不能那样做—— import 语句只能从模块或子模块中引入元素 - 类属性虽然可以使用与子模块访问相同的点语法进行寻址,但不能单独导入。

    你可以做的是:

    from mymodule import myclass
    myvar = myclass.myvar
    del myclass
    

    无论哪种方式,只要确实使用from module import anything 语法,就会读取并处理整个模块。例外是

    from module.submodule import submodule
    

    ,其中,如果子模块本身不需要整个模块,则只处理子模块。

    (因此,即使在上面的解决方法中,mymodule 也会被读取并执行 - 它无法在生成导入语句的全局命名空间中访问,但它及其所有组件在 @ 中都是可见的987654325@字典。

    【讨论】:

    • 您的解决方法看起来与我的解决方法非常相似!谢谢解释
    【解决方案3】:

    按照这两个步骤进行

    1. 从模块中导入类

      from Module import Class

    2. 将新变量分配给类中的现有变量

      var1=Class.var1

      var2=Class.var2

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-13
      • 1970-01-01
      • 2019-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多