python - 如何从另一个文件中的类模块导入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 将其用作另一个函数的输入。
解决方案
您可能应该使用类属性来存储此值。请注意,实现将取决于您的课程的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
推荐阅读
- security - 用于下载所有 CA 证书的 API 或任何来源
- javascript - 暂停广告系列基于:广告系列名称、广告组名称、预算和日期范围
- go - Hyperledger Fabric,golang中的嵌套结果迭代器 - 如何?链码启动失败
- c++ - C++ 原子栅栏和重新排序
- redis - 数据发布到redis时没有调用@SubscribeMessage('events')
- php - 在 Laravel 中通过 CSV 更新不同的数据
- akka - Akka - 无限次调用 preStart 方法
- javascript - 我的会话无法正常工作。一些数据未存储在节点 js 的会话中
- python - 在python中的文件中间读取具有新标题的数据文件
- c# - 使用 C# 在一个请求中发送和接收多个客户端证书