使用以下程序获取未定义的错误
class SignalHandler(object): # pylint: disable=too-few-public-methods
"""
Handles various user generated signals
"""
def __init__(self,
sigint_signalhandler=SignalHandler.signal_handler,
sigquit_signalhandler=SignalHandler.signal_handler,
sighup_signalhandler=SignalHandler.signal_handler):
signal.signal(signal.SIGINT, sigint_signalhandler)
signal.signal(signal.SIGQUIT, sigquit_signalhandler)
signal.signal(signal.SIGHUP, sighup_signalhandler)
@staticmethod
def signal_handler(signalnum):
print ('Ignoring signal : ', signalnum)这就是错误的样子。
import signalhandler
File "/usr/local/sandvine/scripts/upgrade-assistance/signalhandler.py", line 10, in <module>
class SignalHandler(object): # pylint: disable=too-few-public-methods
File "/usr/local/sandvine/scripts/upgrade-assistance/signalhandler.py", line 22, in SignalHandler
sigint_signalhandler=SignalHandler.signal_handler,
NameError: name 'SignalHandler' is not defined因此,最终我想传递一些自定义方法,如果不是,我将使用signal_handler类提供的SignalHandler方法。
发布于 2018-04-23 09:56:50
将类上面的signal_handler定义为普通方法,而不是将其内部定义为静态方法。在定义类之前,不能引用它,这正是__init__所要做的。
或者,在init主体中使用self.signal_handler而不是SignalHandler.signal_handler。
class Foo(object):
def __init__(self, bar_printer=None):
self.bar_printer = bar_printer if bar_printer else self._default_bar_printer
@staticmethod
def _default_bar_printer():
print("bar")
f = Foo()
f.bar_printer() # Prints "bar"
def better_bar_printer():
print("The best bar!")
f2 = Foo(better_bar_printer)
f2.bar_printer() # Prints "The best bar!"https://stackoverflow.com/questions/49978122
复制相似问题