Python 2.7 - 如何从导入的模块调用类方法? “自我”论证

时间:2016-11-09 20:33:37

标签: python python-2.7 methods import self

我一直在论坛里寻找答案,而我发现的最相似的是:Python: How to call class method from imported module? “Self” argument issue。但它并没有解决我的问题。

我有2个脚本:1- X和2-Y。我需要将一些def()从Y导入到X,这里是我导入和实例化的代码:

X脚本 - 我有一个名为txtCorpus的变量,这是我打算操作的变量

import Y
from Y import PreProcessing
txtCorpus
def status_processing(txtCorpus):
    instance = PreProcessing() #Here is where to instantiate the class contained within the Y script and where it has some defs that I need
    myCorpus = instance.initial_processing(txtCorpus)
#After some other lines of operation ...
if __name__ == "__main__":
    status_processing(txtCorpus)

现在是脚本Y

class PreProcessing():
     @property
     def text(self):
        return self.__text

     @text.setter
     def text(self, text):
         self.__text = text

tokens = None
def initial_processing(self):
#Operations

当我执行它的方式时,会显示以下错误:

TypeError: initial_processing() takes exactly 1 argument (2 given)

当我执行此操作myCorpus = instance.initial_processing()时,会显示以下错误:

AttributeError: PreProcessing instance has no attribute '_PreProcessing__text'

当我将txtCorpus作为参数传递时,我必须实例化代码的方式是什么?

3 个答案:

答案 0 :(得分:0)

您没有提供完整的示例,但您在此处看到的错误TypeError: initial_processing() takes exactly 1 argument (2 given)是因为您定义了initial_processing

def initial_processing(self):

只需要1个参数(类实例)。然后,您传递两个参数(instancetxtCorpus):

myCorpus = instance.initial_processing(txtCorpus)

想想这样的类方法:

instance.initial_processing(txtCorpus)
# equivalent to
initial_processing(instance, txtCorpus)

所以你传递了2个参数,但只定义了要处理的方法1.因此,你需要定义它来获取两个参数:

def initial_processing(self, txt):
# code here

答案 1 :(得分:0)

看起来问题是你的功能不是你认为的类的一部分。你应该缩进它,使它成为类的一部分,并为它接受一个参数(txtCorpus)。

class PreProcessing():
     def __init__(self):
         self.__text = None

     @property
     def text(self):
        return self.__text

     @text.setter
     def text(self, text):
         self.__text = text

     tokens = None # Not sure what this is for...?
     def initial_processing(self, txt):
          #Operations

答案 2 :(得分:0)

错误是在定义时需要输入2个参数,一个用于self,一个用于txtCorput

def initial_processing(self, txt):
  # Operations

Y档案:

class PreProcessing():
     @property
     def text(self):
        return self.__text

     @text.setter
     def text(self, text):
         self.__text = text

  tokens = None
  def initial_processing(self, corpus):
    # Operations

您的X脚本没有任何问题(除了您导入的是Yclass而不是PreProcessing ^^)