如果一个变量指的是一个函数或一个类的方法,我怎么能找到它是哪一个,并得到了类类型的情况下,特别是当类仍然被宣布为在给定的例子一个类的方法.
例如.
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函数的句柄,我实际上无法弄清楚方法是在一个类中声明还是作为一个独立的函数
您可以通过检查类型来区分这两者:
>>> type(bar)>>> type(Foo.__init__)
要么
>>> import types >>> isinstance(bar, types.FunctionType) True >>> isinstance(bar, types.UnboundMethodType) True
这是你在一份if
声明中这样做的方式.
此外,您可以从im_class
方法的属性获取类:
>>> Foo.__init__.im_class __main__.Foo
在你调用时get_info(__init__)
(在类定义中),这__init__
是一个普通的函数.
def get_info(function_or_method): print function_or_method class Foo(object): def __init__(self): pass get_info(__init__) # function def bar(): pass get_info(Foo.__init__) # unbound method get_info(Foo().__init__) # bound method get_info(bar) # function
输出(CPython,IronPython):
>
输出(Jython):