关于类和导入的问题

时间:2014-11-15 00:52:21

标签: python class main

我在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中找不到属性。

2 个答案:

答案 0 :(得分:1)

您的即时错误是因为课程Test没有属性var1Test的实例具有该属性,因为它们已执行创建属性的__init__方法。

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

答案 1 :(得分:0)

评论和答案已经为您提供了解决问题的正确方法 要修复它,请立即修改您的代码 但最终我认为你需要知道类和实例变量的区别 请参阅“Class and Instance Variables”文档。

class Test:
    var1 = None
    var2 = None

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