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

时间:2014-04-11 18:32:43

标签: python python-3.x instance-variables

我尝试通过引用__init__方法中的对象来修改类属性,然后在另一种方法中使用它。遗憾的是,下面的代码示例并没有按预期工作......

CODE

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

COMPILE ERR

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

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

1 个答案:

答案 0 :(得分:3)

您的实例属性错误。

首先,您不需要提前声明属性。将parser = None放在类的顶层会创建一个名为parser的类变量,我认为这不是你想要的。通常在Python中,您可以通过简单的赋值随时添加新的实例属性:instance.attr = "whatever"

其次,当您想在方法中进行实例分配时,需要使用self来引用该实例。如果你不使用self,你将分配到函数内的局部变量,而不是实例或类变量。实际上,具体名称self不是必需的,但是您确实需要使用方法的第一个参数(并且打破命名self)的约定可能不是一个好主意。 / p>

因此,要修复代码,请执行以下操作:

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