一尘不染

如何区分函数和类方法?

python

如果变量引用的是函数或类方法,那么在它是类方法的情况下,尤其是在如给定示例中仍声明该类的情况下,如何确定该类是哪个并获得类类型。

例如。

def get_info(function_or_method):
    print function_or_method

class Foo(object):
    def __init__(self):
        pass

    get_info(__init__)

def bar():
    pass

get_info(bar)

在David和JF Sebastian的前两个回答之后更新问题。 为了再次强调JF
Sebastian提到的一点,我希望能够在类中声明函数时区分它(当我得到的类型是一个函数时)而非绑定或未绑定的方法)。即。get_info(__init__)我希望能够在第一次调用发生的地方检测到,该方法被声明为类的一部分。

因为我在其周围放置了一个装饰器,并获得了 init 函数的句柄,所以我提出了这个问题,实际上我无法弄清楚是在类中还是将函数声明为独立函数


阅读 450

收藏
2021-01-20

共1个答案

一尘不染

为了再次强调JF
Sebastian提到的一点,我希望能够在类中声明函数时(当我得到的类型是函数而不是绑定或未绑定的方法时)进行区分。即。get_info(__init__)我希望能够在第一次调用发生的地方检测到,该方法被声明为类的一部分。

因为我在其周围放置了一个装饰器,并获得了init函数的句柄,所以我提出了这个问题,实际上我无法弄清楚是在类中还是将函数声明为独立函数

你不能 JF
Sebastian的答案仍然是100%适用。当执行类定义的主体时,该类本身尚不存在。语句(__init__函数定义和get_info(__init__)调用)在新的本地名称空间中进行;在进行调用get_info时,__init__是对该名称空间中函数的引用,这与在类外部定义的函数没有区别。

2021-01-20