我有一个文件,该文件包含需要在主文件中使用的类定义和函数,以使文本更整洁。但是,我在导入全局变量时遇到问题。
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才能将其用作另一个函数的输入。
答案 0 :(得分:0)
这是如何访问类属性的示例(如果我了解您要正确执行的操作)。假设您有一个名为“ Test_class.py”的python文件,其中包含以下代码:
class Foo(object):
def __init__(self, x, y):
self.x = x
self.y = y
def bar(self):
self.z = self.x + self.y
现在让我们假设您想将该类导入到同一目录中的另一个python文件中,并访问该类的属性。您可以这样做:
from Test_class import Foo
# Initialize two Foo objects
test1 = Foo(5, 6)
test2 = Foo(2, 3)
# Access the x and y attributes from the first Foo object
print(test1.x) # This will print 5
print(test1.y) # This will print 6
# Access the x and y attributes from the second Foo object
print(test2.x) # This will print 2
print(test2.y) # This will print 3
# Access the z attribute from the first Foo object
test1.bar()
print(test1.z) # This will print 11
# Access the z attribute from the second Foo object
test2.bar()
print(test2.z) # This will print 5
之所以可行,是因为在__init__ magic方法中定义的变量是在首次调用Foo对象时立即初始化的,因此可以在此之后立即访问此处定义的属性。必须先调用bar()方法,然后才能访问z属性。我制作了2个Foo对象,只是为了说明包括“自我”的重要性。在变量前面,因为每个属性都是特定于该特定类实例的。
我希望能回答您的问题,但是如果您提供一些示例代码来准确显示您想要做什么,那将非常有帮助。
答案 1 :(得分:0)
您可能应该使用class属性存储此值。注意,实现将取决于您的类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