可以指定一个类属性';这是一个简单的python函数

可以指定一个类属性';这是一个简单的python函数,python,Python,我想在单例中保留对回调函数的引用。 然而,python有一些魔力(无论是在赋值点还是在调用点),这意味着函数需要一个实例对象作为第一个参数——我希望能够存储一个简单的函数。我该怎么做 分配给X.\uuuuu dict\uuuu具有相同的效果 def default(): print "default" class X: func = None @staticmethod def setup(f=default): X.func = f @st

我想在单例中保留对回调函数的引用。 然而,python有一些魔力(无论是在赋值点还是在调用点),这意味着函数需要一个实例对象作为第一个参数——我希望能够存储一个简单的函数。我该怎么做

分配给
X.\uuuuu dict\uuuu
具有相同的效果

def default(): print "default"

class X:
    func = None

    @staticmethod
    def setup(f=default):
        X.func = f

    @staticmethod
    def doit():
        if X.func is None: X.setup()
        # !!!!!!!
        # TypeError: unbound method g() must be called with X instance as first argument (got nothing instead)
        X.func()


def g(): print "g"
X.setup(g)
X.doit()
首先,

如果您这样做:

X.func()
X.setup()之后。这行不通。问题在于设置功能

第一个问题是您的
f=default
。此语法在python中不起作用。不能将变量指定给默认参数

关于问题本身,发生的情况是类
X
没有“绑定”函数g(或默认值)

你需要

def default(): print "default"

class X:
    func = None

    @staticmethod
    def setup(f):
        if f is None:
            X.func = staticmethod(default)
        else:
            X.func = staticmethod(f)

    @staticmethod
    def doit():
        if X.func is None: X.setup()
        X.func()

def g(): print "g"
X.setup(g)
X.doit()

编辑:请使用python 3

为什么存在
X
?为什么要为此定义一个类,特别是如果您不打算创建该类的实例,那么可能会重复该类,为什么要使用旧样式的类?更重要的是,为什么要使用Python 2?