在另一个类方法中定义新的类实例 - Python

时间:2014-05-21 14:39:35

标签: python namespaces instance

我创建了一个class1,其上有一个方法method1,其中我将一个变量声明为另一个class2的实例。它看起来像这样:

class class1(object):   
    def method1(self):
        myInstanceOfClass2 = class2()
        # Do some stuff

当我尝试从method1的实例运行class1时,我收到以下错误:

UnboundLocalError: local variable 'myInstanceOfClass2' referenced before assignment

我可以通过在global myinstanceOfClass2内放method1来解决它,然后再分配一些东西,但我真的不明白为什么。我阅读了文档(https://docs.python.org/2/reference/executionmodel.html),但仍然不明白它是如何工作的。在method1内部声明时,每个不是用户定义类的实例的其他变量似乎都可以正常工作(如整数或每个示例的字符串)。

有人可以向我解释这是如何运作的?

编辑:

我正在做一个错误,我没有在问题中提及,因为从来没有想过它是一个! (并且把我的整个代码放在一边是不可能的,因为太长了。)我实际上在执行class2 = class2()时将类的名称作为实例的名称,并且一直认为Python会知道另一个之间的区别。我现在更改了实例的名称,一切正常。

1 个答案:

答案 0 :(得分:1)

使用class代替def

class class2(object):
    pass

class class1(object):
    def method1(self):
        myInstanceOfClass2 = class2()

c = class1()
c.method1()
print('got here')

对我来说很好。

编辑:上面的文字正在回答最初询问的问题(def代替class)。请参阅第一篇文章中的最终编辑,以获得实际问题的解决方案。