在另一个类中使用Python3对象实例
我正在尝试在__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