在另一个类中使用Python3对象实例

2 投票
1 回答
535 浏览
提问于 2025-04-18 02:24

我正在尝试在__init__方法中通过对象来修改类的属性,然后在另一个方法中使用这个属性。可惜下面的代码示例没有按预期工作...

代码

class Translator:
    #list of attributes
    parser=None
    def __init__(self):   
         parser = Parser_class() ...
         #some other commands
    def Translate(self): 
         something=self.parser.GenerateHead() ...
         #more commands

编译错误

AttributeError: 'NoneType' object has no attribute 'GenerateHead'

我知道我可以把它作为参数传给Translate方法,我只是好奇为什么在Python中这个语句不起作用。

1 个回答

3

你在使用实例属性的时候有些不对。

首先,你不需要提前声明你的属性。在类的最上面写 parser = None 会创建一个类变量叫 parser,这可能不是你想要的。通常在Python中,你可以随时通过简单的赋值来添加新的实例属性,比如 instance.attr = "whatever"

其次,当你想在方法里给实例赋值时,需要用 self 来指代这个实例。如果你不写 self,你其实是在给函数内部的一个局部变量赋值,而不是给实例或类变量赋值。实际上,self 这个名字并不是必须的,但你需要在方法的第一个参数中使用它(而且不遵循把它命名为 self 的约定可能也不是个好主意)。

所以,要修正你的代码,可以这样做:

class Translator:
    # don't declare variables at class level (unless you actually want class variables)

    def __init__(self):   
         self.parser = Parser_class()   # use self to assign an instance attribute

    def Translate(self): 
         something = self.parser.GenerateHead()  # this should now work

撰写回答