首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python中用静态方法指针分配构造器参数?

在python中用静态方法指针分配构造器参数?
EN

Stack Overflow用户
提问于 2018-04-23 09:54:04
回答 1查看 70关注 0票数 0

使用以下程序获取未定义的错误

代码语言:javascript
复制
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)

这就是错误的样子。

代码语言:javascript
复制
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方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-23 09:56:50

将类上面的signal_handler定义为普通方法,而不是将其内部定义为静态方法。在定义类之前,不能引用它,这正是__init__所要做的。

或者,在init主体中使用self.signal_handler而不是SignalHandler.signal_handler

代码语言:javascript
复制
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!"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49978122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档