“未绑定的本地错误”,从另一个函数访问变量

时间:2013-11-26 03:47:35

标签: python oop python-2.7 gis arcgis

所以我认为我已经掌握了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,遇到了问题。我怎样才能做到这一点,而不仅仅是将变量设为全局变量(我试图避免)?

1 个答案:

答案 0 :(得分:0)

domainNumber是
text是domainNumber实例的属性。

要使其工作,您应该创建一个domainNumber类型的对象:

dn = domainNumber()
dn.onEditChange("123")

...

num = dn.text