所以我认为我已经掌握了OOP的东西,但是当我认为我理解它时,会出现意想不到的事情。
我将一个函数中创建的变量分配给另一个函数,然后改变它(注意,这是不全局,我已经从中吸取了教训)。但我仍然收到一个未绑定的本地错误,这让我感到困惑。我已经阅读了这里和其他地方关于这个错误的大部分文档,我还没有找到这个具体问题的答案。
以下是错误消息:
Traceback (most recent call last)
File "C:\Users\Tony DiBiase\AppData\Local\ESRI\Desktop10.2\AssemblyCache\{2801A62B-53E6-17B4-D465-BB6072FDEEF9}\parameterizer_final_addin.py", line 115, in onClick
num = domainNumber.text
UnboundLocalError: local variable 'domainNumber' referenced before assignment
这就是我正在尝试做的事情(为了简洁而编辑出外源部分):
class domainNumber(object):
"""Implementation for parameterizer_final_addin.domainNumber (ComboBox)"""
def __init__(self):
self.items = ["3000", "1000", "200", "100"]
self.editable = True
self.enabled = True
self.dropdownWidth = 'WWWWWW'
self.width = 'WWWWWW'
self.hinttext = "Cell resolution (m^2)"
def onEditChange(self, text):
#so pass the text changed to a domainNumber.text, which can be passed to other functions
self.text = text
class printFinal():
"""Implementation for parameterizer_final_addin.printFinal"""
def __init__(self):
self.enabled = True
self.checked = False
def onClick(self):
#iterate through domains, using number set in domainNumber
counter = 0
num = domainNumber.text #So calling the variable from the other function
num = num-1
#run the business logic for the esri pythonaddin
while counter < num:
~do stuff
num+=1 #to iterate through and finish the loop
所以非常明显的是,当我尝试更改 domainNumber.text
类中的printFinal
变量时,会发生错误。但这让我感到困惑,因为printFinal
类并没有尝试改变全局变量,当我在domainNumber.text
类中调用printFinal
时,它应该是printFinal
命名空间中的本地(并因此可编辑)?我的意思是,我特意将domainNumber.text
保存到一个局部变量中,然后改变那个而不是试图改变domainNumber.text
本身。
右?我从我的代码中的其他函数访问变量,并没有遇到这个问题,这只是因为我在这里减去了1,遇到了问题。我怎样才能做到这一点,而不仅仅是将变量设为全局变量(我试图避免)?
答案 0 :(得分:0)
domainNumber是类。
text是domainNumber实例的属性。
要使其工作,您应该创建一个domainNumber类型的对象:
dn = domainNumber()
dn.onEditChange("123")
...
num = dn.text