我创建了一个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会知道另一个之间的区别。我现在更改了实例的名称,一切正常。
答案 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
)。请参阅第一篇文章中的最终编辑,以获得实际问题的解决方案。