当前位置:  开发笔记 > 编程语言 > 正文

如何区分函数和类方法?

如何解决《如何区分函数和类方法?》经验,为你挑选了2个好方法。

如果一个变量指的是一个函数或一个类的方法,我怎么能找到它是哪一个,并得到了类类型的情况下,特别是当类仍然被宣布为在给定的例子一个类的方法.

例如.

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函数的句柄,我实际上无法弄清楚方法是在一个类中声明还是作为一个独立的函数



1> David Z..:

您可以通过检查类型来区分这两者:

>>> 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



2> jfs..:

在你调用时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):





推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有