如何访问在另一个函数中声明的变量

时间:2017-03-21 16:45:03

标签: python function class variables global

我正在尝试访问另一个函数中声明的变量,但我得到了

ERROR:
AttributeError: 'Myclass1' object has no attribute 'myDictIn'

我使用的代码如下:

class Myclass1(object):
    def __init__(self):
        pass
    def myadd(self): 
        x=self.myDictIn # tried accessing variable declared in another function
        return x
    def mydict(self):  #variable declared in this function
        myDictIn={1:[1,2,3,4],3:[4,5,6,7]}
        self.myDictIn= myDictIn
        return myDictIn
inst=Myclass1() # Created instance
inst.myadd() # Accessing function where I am using an variable declared in another function

我还尝试将其声明为全局

 def mydict(self):  #variable declared in this function
        global myDictIn
        myDictIn={1:[1,2,3,4],3:[4,5,6,7]}
        self.myDictIn= myDictIn
        return myDictIn

但仍然有相同的错误

请帮帮我.... 实际上我需要访问一个函数中生成的变量并在另一个函数中使用它.... 我试过.....

  1. 声明为类变量(在 init 之前和声明类名后)
  2. init 中声明该变量 这两种方法导致了进一步的错误
  3. 所以我必须能够访问在一个函数中生成的varibale并在另一个函数中使用它。请帮我找一个答案

3 个答案:

答案 0 :(得分:0)

您的实例从不调用方法mydict。请记住,python是逐行解释的,self.myDictIn将不会在那时被分配。

相反,为什么不在构造函数中编写self.myDictIn = ....

答案 1 :(得分:0)

在myadd(self)中,将myDictIn声明为全局。如您所知,变量需要在使用之前声明/分配。如果程序在分配之前遇到myDictIn,则会抛出错误。所以请在程序遇到myDictIn之前声明myDictIn。

希望这有帮助!

答案 2 :(得分:0)

看起来你只需要gettersetter,你可以使用python properties来做到这一点:

class Myclass1(object):
    def __init__(self, dict_value):
        self.myDictIn = dict_value

    @property
    def myDictIn(self):
      print(self.__myDictIn)
      return self.__myDictIn

    @myDictIn.setter
    def myDictIn(self, value):
        if not isinstance(value, dict):
            raise TypeError("dict_value must be a dict")
        self.__myDictIn = value

dict_value = {1: [1, 2, 3 ,4], 3: [4, 5, 6, 7]}
inst = Myclass1(dict_value)
inst.myDictIn # {1: [1, 2, 3 ,4], 3: [4, 5, 6, 7]}

这样,您仍然可以轻松更改MyDictIn

的值
inst.myDictIn = {1: [1, 2, 3]}
inst.myDictIn # {1: [1, 2, 3]}