python文件之间传参问题

遇到的问题

由main.py传参至Dealdata_Function.py时,会出现TypeError: input() missing 1 required positional argument: 'listData'。但独立Dealdata_Function.py并不会出现问题。

相关代码

main.py中的

AllDatalist = ['1-1-3', [["序号", "2", "2"], ['1', '1C', '2']]]
Assign_program().flashInput(AllDatalist)

Dealdata_Function.py中的

class Assign_program():
    # 起始函数区域
    def __init__(self):
        print("开始分配模块......")
        # 测试代码及输入源示例
        # self.flashInput(['1-1-3', [["序号", "2", "2"], ['1', '1C', '2']]])

    def flashInput(self, listData):
        result = listData[0].split("-")
        if result[1] == '1':
            # 解析数据为'1', 跳转相应模块
            Module_General_Demo1.input(listData)
        elif result[1] == '2':
            # 解析数据为'1', 跳转相应模块
            Module_Ds_Demo2.input(listData)
        else:
            print(listData)

# 模块1
class Module_General_Demo1():
    # 起始函数区域
    def __init__(self):
        pass

    def input(self, listData):
        print("开始处理数据......")
        # 测试输入源信息
        print(listData)

尝试过的解决办法

如果单独运行Dealdata_Function.py中Assign_program类中下面代码,是正常的。

self.flashInput(['1-1-3', [["序号", "2", "2"], ['1', '1C', '2']]])

但一运行main程序的代码就会出现问题,提出错误代码为

Traceback (most recent call last):
  File "D:/*********************/main.py", line 698, in processDate
    Assign_program().flashInput(AllDatalist)
  File "D:\******************\Dealdata_Function.py", line 51, in flashInput
    Module_General_Demo1.input(self.list)
TypeError: input() missing 1 required positional argument: 'listData'

请求各位指点,感激不尽!


        if result[1] == '1':
            # 解析数据为'1', 跳转相应模块
            demo1 = Module_General_Demo1()
            demo1.input(listData)

直接调用类要加括号 看图

img

将Dealdata_Function.py代码文件中的Module_General_Demo1.input(listData)改为 Module_General_Demo1().input(listData)就可以了,即先创建对象,再调用其方法。

然后Dealdata_Function.py第15行也和12行类似的话,也可以将Module_Ds_Demo2改为Module_Ds_Demo2()。

修改如下:

参考链接:



Dealdata_Function.py


class Assign_program():
    # 起始函数区域
    def __init__(self):
        print("开始分配模块......")
        # 测试代码及输入源示例
        # self.flashInput(['1-1-3', [["序号", "2", "2"], ['1', '1C', '2']]])
    
    def flashInput(self, listData):
        result = listData[0].split("-")
        if result[1] == '1':
            # 解析数据为'1', 跳转相应模块
            # https://docs.python.org/zh-cn/3/tutorial/classes.html
            #  先创建对象,再调用其对应的方法
            Module_General_Demo1().input(listData)
        elif result[1] == '2':
            # 解析数据为'1', 跳转相应模块
            Module_Ds_Demo2().input(listData)
        else:
            print(listData)
 
# 模块1
class Module_General_Demo1():
    # 起始函数区域
    def __init__(self):
        pass
 
    def input(self, listData):
        print("开始处理数据......")
        # 测试输入源信息
        print(listData)


main.py


import Dealdata_Function
AllDatalist = ['1-1-3', [["序号", "2", "2"], ['1', '1C', '2']]]
Dealdata_Function.Assign_program().flashInput(AllDatalist)


img

问题点:类内部函数调用
分析思路:部分类函数,若不是静态函数,无法直接调用,需要先实例化后,才能调用.
解决办法:将类函数改为静态函数(推荐)或实例化对象后,再引用该实例的内部函数.
代码修改如下:

class Assign_program():
    # 起始函数区域
    def __init__(self):
        print("开始分配模块......")
        # 测试代码及输入源示例
        # self.flashInput(['1-1-3', [["序号", "2", "2"], ['1', '1C', '2']]])
 
    def flashInput(self, listData):
        result = listData[0].split("-")
        if result[1] == '1':
            # 解析数据为'1', 跳转相应模块
            Module_General_Demo1.input(listData)
        elif result[1] == '2':
            # 解析数据为'1', 跳转相应模块
            Module_Ds_Demo2.input(listData)
        else:
            print(listData)
 
# 模块1
class Module_General_Demo1():
    # 起始函数区域
    def __init__(self):
        pass
     
    @staticmethod
    def input(listData):
        print("开始处理数据......")
        # 测试输入源信息
        print(listData)