在python3中定义函数内部的函数

时间:2014-03-23 20:05:28

标签: python function python-3.x

我正在尝试将python3中的函数定义为

from gi.repository import Gtk, GObject

class EntryWindow(Gtk.Window):

    def __init__(self):
        Gtk.Window.__init__(self, title="Generate Init")
        self.set_size_request(100, 50)
        self.nument = Gtk.Entry()

        <did some work>

    def get_nument(self,nument):
      numele= self.nument.get_text()
      print(numele)
      <did some more work and define a function again>
        def get_specs(self,spec):
            numspec=self.spec.get_text()

导致错误:

Traceback (most recent call last):
  File "hw3.py", line 42, in get_nument
    self.spec.connect("activate",self.get_specs)
AttributeError: 'EntryWindow' object has no attribute 'get_specs'

我是python的新手,所以努力理解自我的范围和这个错误的起源。另外,根据this post,我可能通过在函数内声明一个函数来做一些非常有趣的事情。

我需要的是定义一个函数(get_specs),它将由另一个函数(get_nument)调用。

这实际上是一个gtk3代码,但我猜它是python的问题。 可以看到完整的代码,在其当前状态here。 请帮助。

1 个答案:

答案 0 :(得分:0)

此:

File "hw3.py", line 42, in get_nument
  self.spec.connect("activate",self.get_specs)

get_nument中,将get_specs引用为get_specs。所以,试试:

self.spec.connect("activate", get_specs)

这只是你在get_nument范围内声明的函数,所以它就像任何变量一样。一个例子:

def foo(self):

    x = 34
    def bar():
        # ...

    # Use x:
    print(x)
    # Use bar:
    print(bar())  # Note: no self, because bar isn't part of self.