我在Ubuntu 14.04上使用python 2.7 32位。这有点难以描述,但我正在尝试使用来自类的"__ main __"的变量。
这是 main.py 文件:
import time
class Test:
def __init__(self):
self.var1 = 1
self.var2 = "foo"
import less
self.a = less.c()
def run(self):
self.a.update()
d = Test()
while True:
time.sleep(0.2)
d.run()
这是另一个 less.py 文件:
from __main__ import Test
class c:
def __init__(self):
self.a = "a"
self.b = "b"
def update(self):
if (Test.var1 == 1):
print(self.a)
当我运行 main.py 脚本时,终端会抛出此错误:
Traceback (most recent call last):
file "main.py", line 18, in <module>
d.run
file "main.py", line 12, in run
self.a.update()
file "/home/username/Workspace/less.py", line 9, in update
if (Test.var1 == 1):
AttributeError: class Test has no attribute "var1"
我的问题是为什么 less.py 在类测试中找不到属性。
您的直接错误是因为类Test
没有属性var1
。 Test
的实例具有该属性,因为它们执行了创建该属性的__init__
方法。
顺便说一句:你不应该导入__main__
,这最终会是个坏消息。 在另一个模块中定义您的类,并将该新模块导入到您的主文件和需要该类的其他文件中。
注释和答案已经为您提供了解决问题的正确方法。
要立即修复它,请像下面这样修改您的代码。
但最终我认为您需要知道类和实例变量的区别。
请参阅"类和实例变量"文档。
class Test:
var1 = None
var2 = None
def __init__(self):
Test.var1 = 1
Test.var2 = "foo"
import less