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

标签 python python-3.x instance-variables

我试图通过引用 __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 中不起作用。

最佳答案

您的实例属性设置错误。

首先,您不需要提前声明您的属性。将 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

关于Python3,在另一个类中使用对象实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23020139/

相关文章:

python-3.x - VGG16 过滤器的可视化

python - 使用mongoengine时出现Django auth错误

ruby - ruby 中的实例变量就像类变量

python迭代一个非常大的文件流

python - 当不需要分配结果时如何调用Python函数

python - 如何将选择(点击)写入文件

objective-c - Objective-C 方法如何访问被调用者的 ivars?

ios - 为什么在子类中看不到继承的实例变量?

python - PyCharm 无法识别我的 Python 安装路径

python - 如何将 numpy.array 作为新列添加到 pyspark.SQL DataFrame?