在另一个模块中使用python方法

在另一个模块中使用python方法,python,Python,我创建了一个类,该类使用了我试图调用的方法,尽管另一个python模块只包含一个主函数,它给了我一个名称“unigueIDList is not defined”错误。下面缩短了代码 第一模块 class ClassObjects: def __init__(self, unigueIDList, nameList, priceList): self.ID = unigueIDList self.name = nameList self.p

我创建了一个类,该类使用了我试图调用的方法,尽管另一个python模块只包含一个主函数,它给了我一个名称“unigueIDList is not defined”错误。下面缩短了代码

第一模块

class ClassObjects:
    def __init__(self, unigueIDList, nameList, priceList):
        self.ID = unigueIDList
        self.name = nameList
        self.price= priceList

    def uniqueId(self, list):
        unigueIDList= []
        [unigueIDList.append(item) for item in list 
        if item not in unigueIDList]
        self.ID.extend(unigueIDList)
        return unigueIDList

    def loadList(filename1, filename2):
        with open(filename1, "r") as csv1, open(filename2, "r") as csv2:  
            csvReader1 = csv.DictReader(csv1)
            csvReader2 = csv.DictReader(csv2)
            iDList = []
            for row1, row2 in zip(csvReader1, csvReader2):  
                idList.append((row2["Id"]))
            return iDList 
第二模块

def main()
    newTest = ClassObjects(unigueIDList, nameList, priceList)
    iDList = newTest.loadList(filename1, filename2)
    Id = newTest.uniqueId(iDList)

我相信你们并没有给懒汉下定义是事实。请试试这个:

def main()
    idList=[]
    Id = ClassObjects.uniqueId(idList)

如果问题解决了,您还没有定义idList

我不知道这是否是一个优雅的解决方案,但是您可以尝试在调用函数时输入类名作为参数

ClassObjects.uniqueId(ClassObjects,idList)

我认为您应该首先构建实例。您现在如何调用它,没有先创建实例,您只是像调用静态方法一样调用它,但它不是,因此第一个参数被视为
self
,第二个参数丢失。相反,您首先需要一个初始化的对象

class ClassObjects:
    def __init__(self, iDList, nameList, priceList):
        self.ID = iDList
        self.name = nameList
        self.price= priceList

    def uniqueId(self, list):
        pass #empty definitions are forbidden
    def loadList(filename1, filename2):
        pass #empty definitions are forbidden
以及您第一次创建实例的主要位置

def main():
    # create instance with empty list properties
    clsObj = ClassObjects([], [], []) 
    # the values you pass through the methods need to be defined beforehand
    Id = clsObj.uniqueId(yourList)
    iDList = clsObj.loadList(someFilename, otherFilesname)

您需要首先创建一个新实例。您正在调用一个实例方法,而不是静态/类方法。@BramVanroy这就是我尝试使用newTest=ClassObjects(iDList、nameList、priceList)时所做的操作。您不调用
instance=ClassObjects(iDList、[]、[])有什么原因吗
然后使用类设计器想要的方法?@tripleee我尝试了类似的方法,在运行ITI时出现了一个idList is not defined错误如果您试图使用一个未创建的变量,这与您的问题无关。我们真的猜不出这些变量是什么意思,或者它们来自哪里。在LoadList内部创建idList时,请显示定义idList的代码。还有main()是loadlist的方法吗?@No loadlist()是Class1中的方法,main在类之外的一个单独的模块中。因此,您必须链接到idList。类似于Class1的东西。idList@kabanus我在一篇评论中提到了这一点,但我将在中编辑它。在我得到的这个解决方案中,没有定义名称“iDList”,我在class1中定义它。好的,您的构造函数需要三个属性,iDList、nameList和priceList,所以您必须确保在其中输入正确的值。构建实例所需的这些列表的实际变量名。根据Python,正确的变量名肯定是可用的,而不是。请注意,在
clsObj
中,
iDList
的大写字母与第
Id
行中的大写字母不同:
iDList
。可能是你的代码输入错误。