2017-03-21 100 views
0

我试图访问另一个函数声明的变量内声明的变量,但我得到了如何访问其他功能

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. 声明为类 这些2种方法会导致进一步的错误
变量(前 INIT和声明类名之后)
  • 声明INIT内的可变

    所以我必须能够访问一个函数内生成的varibale,并在另一个函数中使用它。请帮助我找到答案

  • +0

    你是什​​么意思“类型转换知道列表的大小”?你可以给一个*完整的例子*?为什么不只是不“转换为数组然后追加到列表”并使用数组? –

    +2

    您似乎对'A [0]'感兴趣,而不是'A'。 “A”是如何定义的? – chepner

    +0

    另外,Python中没有“typecast”运算符。虽然该术语的用法是“将此对象转换为另一种类型的对象”,但我不认为这种用法真的有用,它不像Java或C语言中的类型转换。 –

    回答

    0

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

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

    +0

    由于Doc, 我在__init__中声明并声明了它。我收到的结果与预期一致。 def __init __(self): self.myDictIn = {1:[1,2,3,4],3:[4,5,6,7]} 如果变量必须在赋值后使用另一个功能....有没有可能性? def mydict(self): myDictIn = {1:[1,2,3,4],3:[4,5,6,7]} return myDictIn – Abhishek

    +0

    这很好,只要您绝对确定在声明它之前,不要尝试访问self.myDictIn属性。在不同于__init__的方法中声明类变量更为不寻常,尽管有时您必须这样做。但是,您最好在__init__构造函数中声明self.DictIn = {},并在其他地方填充其他函数。 –

    +0

    如果我们声明 self.myDictIn = {} 那么无论何时在任何函数中调用myDictIn那么答案将永远是 {} 如果......,我想反映由函数内的另一个函数所做的修改 – Abhishek

    0

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

    希望这会有所帮助!

    +0

    谢谢unMask,我想让你通过使它成为全局的输出。 .... 类MyClass1的(对象): DEF __init __(个体): 通 DEF myadd(个体): ×= self.myDictIn 打印(X) 返回X DEF mydict(个体): 全球myDictIn myDictIn = {1:[1,2,3,4],3:[4,5,6, 7]} self.myDictIn = myDictIn 返回myDictIn 研究所= MyClass1的() inst.myadd() 预期输出: {1:[1,2,3,4],3:[4,5 ,6,7]} 实际输出: AttributeError:'Myclass1'对象没有属性'myDictIn' – Abhishek

    +0

    您已声明全局myDictIn in mydict而不是myadd – Len

    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]} 
    
    +0

    由于最大不过我仍然无法myadd .... 类MyClass1的(对象)内打印myDictIn变量: 高清__init __(个体经营): self.myDictIn =无 高清myadd(个体经营): X =自.myDictIn 打印(X) 返回X DEF mydict(个体): myDictIn = {1:[1,2,3,4],3:[4,5,6,7]} self.myDictIn = myDictIn return myDictIn inst = Myclass1() inst.myadd() 实际输出: 无 预期输出: {1:[1,2,3,4],3:[4,5,6,7]} – Abhishek

    +0

    是的,因为您必须先运行方法'mydict'。你应该调用'__init__'方法。我会更新我的答案,如果你努力去做 –

    +0

    最大,其实我需要访问一个函数中生成的变量,并在另一个函数中使用它....此外 我想声明为类变量(__init__之前,并宣布在类名后) 此外,我试着用__init__ 这2个方法导致内进一步的错误 所以我必须能够访问varibale一个函数中产生,并用它在另一个函数 – Abhishek

    相关问题