Python 对象初始化时的属性错误

0 投票
2 回答
611 浏览
提问于 2025-04-17 11:02

Python 2.6.7;Windows 7

在用Python解决Deitel的“简单编译器”练习。代码库在github上。正在编写测试套件。

module compiler.py
class SCompiler( object ) :
    RAMSIZE = 100
    # more static attributes

    def __init__( self ) :
        self.symbolTable = [ TableEntry( ) ] * SCompiler.RAMSIZE
        self.lineFlags[ -1 ] * SCompiler.RAMSIZE
        # more initializations

错误追踪信息。

File "testCompiler.py", line 45, in <module>
tool = compiler.SCompiler( )
File "absolutePath\compiler.py", line 37, in `__init__`
self.lineFlags[ -1 ] * SCompiler.RAMSIZE
AttributeError: 'SCompiler' object has no attribute 'lineFlags'

我不太确定这里有什么拼写错误。'compiler.py'这个文件在编译时没有任何提示。TableEntry是文件中的另一个类。谢谢你的建议。

2 个回答

0

在你把self.lineFlags当成数组使用之前,得先给它初始化一下。

self.lineFlags = []
self.lineFlags[-1] * SCompiler.RAMSIZE
1

你遇到 AttributeError 的原因是因为在调用的时候,

self.lineFlags[-1]

它还不知道 lineFlag 是什么。

不过根据下面这一行来看(来自你链接的仓库中的 compiler.py)

self.smlData = [ 0 ] * SCompiler.RAMSIZE

我觉得作者可能忘记加一个 =,你可以试着把:

self.lineFlags[ -1 ] * SCompiler.RAMSIZE

替换成:

self.lineFlags = [ -1 ] * SCompiler.RAMSIZE

撰写回答