可以分配一个类属性,它是一个简单的函数python

Possible to assign a class attribute that's a simple function python

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

分配给X.__dict__具有相同的效果。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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(或缺省值)"绑定"。

你需要

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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