首页 > 解决方案 > 如何从另一个文件中的类模块导入python中的全局变量?

问题描述

我有一个文件,其中包含我需要在主文件中使用的类定义和函数,以使文本更清晰。但是,我在导入全局变量时遇到了问题。

SO 和其他资源中有大量关于如何在同一代码中使函数变量成为全局变量或如何使用导入文件中的全局变量的信息。但是,如果变量属于属于某个类的函数,则没有关于如何从导入的文件访问变量的信息。

对于如何做到这一点或为什么不能做到这一点,我将不胜感激。请跳过关于使用这样的全局变量的危险的讲座,因为我的情况需要这样使用。

编辑:很抱歉在原始帖子中没有示例。这是我的第一个。下面是我想要完成的一个例子。

假设我有一个文件 classes.py,其中包含:

class HelixTools():
    def calc_angle(v1, v2):
    v1_mag = np.linalg.norm(v1)
    v2_mag = np.linalg.norm(v2)

    global v1_v2_dot
    v1_v2_dot = np.dot(v1,v2)
    return v1_v2_dot

然后在我的主文本文件中,我这样做:

from classes import HelixTools

ht = HelixTools()
v1 = some vector
v2 = some other vector
ht.calc_angle(v1,v2)
print(v1_v2_dot)

结果是“v1_v2_dot”未定义。我需要 v1_v2_dot 将其用作另一个函数的输入。

标签: pythonclassvariablesimport

解决方案


您可能应该使用类属性来存储此值。请注意,实现将取决于您的课程的HelixTools实际用途。但是对于这个例子,你可以使用这样的东西:

import numpy as np

class HelixTools():

    def __init__(self):
        # Initialize the attribute so you'll never get an error calling it
        self.v1_v2_dot = None

    def calc_angle(self, v1, v2):       # Pass self as first argument to this method
        v1_mag = np.linalg.norm(v1)
        v2_mag = np.linalg.norm(v2)
        # Store the value in the attribute
        self.v1_v2_dot = np.dot(v1,v2)

接着:

from classes import HelixTools

ht = HelixTools()
v1 = some vector
v2 = some other vector
ht.calc_angle(v1,v2)    # This will not return anything
print(ht.v1_v2_dot)     # Access the calculated value

推荐阅读