Python: “Self”未定义?

3 投票
2 回答
8523 浏览
提问于 2025-04-17 05:13

我又回来了,还是那个让人困惑的脚本……我修了很多空格问题,但似乎还有更多问题?到底哪里出错了——它说第332行的self没有定义……

这里是那段脚本上下几行,可能有帮助:

#-Whats being decompiled start
#map(None,*list) = zip(*list)
class areaset(top_tsv):
   def __init__(self, file_name=0, version=0):
       top_tsv.__init__(self, file_name, version)
   self.frombin_map = [    <--- this is 332
   ('ID'        ,{'t':'ulong','lpad':0x04}),
   ('Name'      ,{'t':'str','s':0x48,'rpad':0x1C}),
   ('RGB color'   ,{'t':'color','rpad':0x01}),
   ('Sound effect ID'  ,{'t':'long'}),
   ('Color RGB'   ,{'t':'rcolor','rpad':0x01}),
   ('Lighting RGB value' ,{'t':'rcolor','rpad':0x01}),
   ('Lighting angle'  ,{'t':'float','s':0x03,'f':0x01}),
   ('Is it City?'  ,{'t':'ubyte','rpad':0x03}),
    ]

我就是搞不明白,现在脑子一片空白……还有很多其他“self没有定义”的错误,但如果我能解决这个问题,至少我就知道怎么处理其他的了。那么我该怎么做呢?

2 个回答

4

在Python中,缩进是很重要的。self是在__init__()这个函数里面定义的,所以如果你想在第332行使用这个self,就要把它缩进到和上面那行对齐。

11

如果你提供的代码片段准确反映了你程序中的内容,那么问题在于你的 __init__ 构造函数里只有一行代码。你需要修正一下缩进。

Self 这个词只在类的成员函数中定义。你没有缩进的代码其实并不属于构造函数,而是在你 import 这个类的时候就被执行了。

Python 的一个很大的优点就是它通过缩进来识别代码块,而不是用大括号或者 beginend 这样的方式。你 必须 正确使用缩进,这样解释器才能理解你的代码。

撰写回答