1

如何判断类实例方法和函数是否相同?

我有一个使用装饰器的简单类:

@decorate_class
class Hello:

    @decorate_func
    def world(self):
        return

这些是我的装饰器:

# A global variable
global_func = None

def decorate_func(func):
    global_func = func
    return func

def decorate_class(clazz):
    print clazz.__dict__["world"] == global_func
    return clazz

以上返回False,可能是因为type(func)in decorate_funcis function,但 in decorate_classit is instancemethod。但是打印它们都给了我:

<function world at 0x7f490e59ce60>

如,相同的内存地址。我如何比较它们以知道它们是相同的功能?通过内存地址进行比较是否安全(且正确)?

4

1 回答 1

3

您的问题实际上是您对global_func.

如果您更改decorate_class为:

def decorate_class(clazz):
    print global_func, clazz.__dict__["world"] == global_func
    return clazz

你会看到那global_funcNone.

要解决此问题,请显式声明global_func如下:globaldecorate_func

def decorate_func(func):
    global global_func
    global_func = func
    return func

一切都会奏效。

这(基本上)是因为 Python 假定,如果您在函数中分配一个变量,则该变量被假定为该函数的局部变量,除非它被显式声明为全局变量。

于 2012-06-09T15:36:00.167 回答