Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在类内部,从一个函数访问另一个函数中的字典值_Python - Fatal编程技术网

Python 在类内部,从一个函数访问另一个函数中的字典值

Python 在类内部,从一个函数访问另一个函数中的字典值,python,Python,我有一个模块,其中有一个类和两个函数。 首先调用func2,它从SQL输出创建字典。 我想访问这些字典中的值,将其写入func1中的文件 我试图搜索答案,但找不到我的场景,所以发布了这个问题 import sys import os import abc as var class test(): def func1(self,A,B,C): csv=sample.csv print>>csv,"Va

我有一个模块,其中有一个类和两个函数。 首先调用func2,它从SQL输出创建字典。 我想访问这些字典中的值,将其写入func1中的文件

我试图搜索答案,但找不到我的场景,所以发布了这个问题

import sys
import os 
import abc as var

class test():

        def func1(self,A,B,C):
                csv=sample.csv
                print>>csv,"Value in dict from other function,",<not sure how to call>.tgt_dict3['table_name']
                <do something else>

        def func2(self,x,y,z):
                <do something not related to issue>
                #Call function collect_var and pass same arguments which this function received
                #This function takes input and runs query on SQL and returns dictionaries with column name and values
                (dict1,dict2,dict3)=var.collect_var(x,y,z)  

                 tgt_dict1=dict1[0]
                 tgt_dict2=dict2[0]
                 tgt_dict3=dict3[0]
导入系统 导入操作系统 将abc作为var导入 类测试(): def func1(自身、A、B、C): csv=sample.csv 打印>>csv,“来自其他函数的dict中的值,.tgt_dict3['table_name'] def func2(自身、x、y、z): #调用函数collect_var并传递该函数接收到的相同参数 #此函数接受输入并对SQL运行查询,并返回带有列名和值的字典 (dict1,dict2,dict3)=变量收集变量(x,y,z) tgt_dict1=dict1[0] tgt_dict2=dict2[0] tgt_dict3=dict3[0]
像juanpa.arrivillaga所说的那样,您可以将字典作为参数传递,也可以将其设置为类/对象属性。因为您没有返回它们,所以我假设它们应该是类属性。这可以按如下所示完成。不过老实说,我不相信你在问这个问题之前已经仔细看过了,因为这在任何课堂教程中都可以找到

import sys
import os 
import abc as var

class test():
    tgt_dict1 = {}
    tgt_dict2 = {}        
    tgt_dict3 = {}

    def func1(self,A,B,C):
            csv=sample.csv
            print>>csv,"Value in dict from other function,",test.tgt_dict3['table_name']
            <do something else>

    def func2(self,x,y,z):
            <do something not related to issue>
            #Call function collect_var and pass same arguments which this function receive
            #This function takes input and runs query on SQL and returns dictionaries with column name and values
            (dict1,dict2,dict3)=var.collect_var(x,y,z)  

             test.tgt_dict1=dict1[0]
             test.tgt_dict2=dict2[0]
             test.tgt_dict3=dict3[0]
导入系统 导入操作系统 将abc作为var导入 类测试(): tgt_dict1={} tgt_dict2={} tgt_dict3={} def func1(自身、A、B、C): csv=sample.csv 打印>>csv,“来自其他函数的dict中的值”,test.tgt_dict3['table_name'] def func2(自身、x、y、z): #调用函数collect_var并传递此函数接收的相同参数 #此函数接受输入并对SQL运行查询,并返回带有列名和值的字典 (dict1,dict2,dict3)=变量收集变量(x,y,z) test.tgt_dict1=dict1[0] test.tgt_dict2=dict2[0] test.tgt_dict3=dict3[0]
。。。将字典作为参数传递给该方法,或者使用实例属性?嗯,您实际上没有在方法中使用类变量。还有,为什么不使用实例变量呢?我认为这是一个更合理的假设,而不是类变量。范围应该是有效的,但我已经把它改为显式的。之所以使用静态类而不是实例,是因为它们是如何定义函数的,以及调用函数的方式。David,我确实找到了可以将这些函数作为参数传递的答案,但我正在寻找一个不需要将其作为参数传递的解决方案。但是看起来,如果不在类级别声明它,就不可能简单地使用它。(我希望找到类似于“main”的东西)。根据您推荐的解决方案,我假设我必须在func1中将这些字典定义为全局。我阅读了一些关于禁止使用全局变量的警告,但由于我不尝试更改这些,只使用它,我希望我会没事。我会随时向您发布。这些变量不是全局变量,也不需要decl它们是类变量。它们将与上面编写的代码一起工作。如果您对python的类/对象教程感到困惑,我建议您查看它。