有关类和导入的问题



我在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没有属性var1Test的实例具有该属性,因为它们执行了创建该属性的__init__方法。

顺便说一句:你不应该导入__main__,这最终会是个坏消息。 在另一个模块中定义您的类,并将该新模块导入到您的主文件和需要该类的其他文件中。

注释和答案已经为您提供了解决问题的正确方法。
要立即修复它,请像下面这样修改您的代码。
但最终我认为您需要知道类和实例变量的区别。
请参阅"类和实例变量"文档。

class Test:
    var1 = None
    var2 = None
    def __init__(self):
        Test.var1 = 1
        Test.var2 = "foo"
        import less

相关内容

  • 没有找到相关文章