当前位置: 首页 > 面试题库 >

如何区分函数和类方法?

凌宏大
2023-03-14
问题内容

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

例如。

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 函数的句柄,所以我提出了这个问题,实际上我无法弄清楚是在类中还是将函数声明为独立函数


问题答案:

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

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

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



 类似资料:
  • 我有一个类型的参数

  • Kotlin中的参数与Java中有些不同。如你所见,我们先写参数的名字再写它的类型: fun add(x: Int, y: Int) : Int { return x + y } 我们可以给参数指定一个默认值使得它们变得可选,这是非常有帮助的。这里有一个例子,在Activity中创建了一个函数用来toast一段信息: fun toast(message: String, length: I

  • 我目前正在使用java编写线性代数库,灵感来自我的线性代数I 我希望我的程序尽可能灵活,因此决定我的矩阵类将有许多可用的构造函数。然而,当我试图将这两个构造函数结合在一起时,Java抛出了一个编译错误: 我不明白为什么,因为第一个构造函数将接受任意数量的数组作为args:而第二个构造函数将只接收一个arg:。我意识到在两个构造函数中,我将处理相同的数据结构(双的2D数组),但这里没有关于输入类型的

  • 使用这种语法,我试图从sql查询中提取用户编写的表达式。 例如,我想从这个查询中提取FNAME、LName和name。 [解析树] 我可以使用ListNor提取“名称”: 但是当我试图用

  • 问题内容: 有人可以在OOP上下文中提供方法与功能的简单说明吗? 问题答案: 甲函数是一段代码由名字叫做。可以传递数据以对其进行操作(即参数),还可以选择返回数据(返回值)。传递给函数的所有数据都被显式传递。 甲方法是一段代码,由与对象相关联的名称叫。在大多数方面,它与功能相同,但有两个主要区别: 方法被隐式传递给调用该方法的对象。 方法能够对类中包含的数据进行操作(记住,对象是类的实例-类是定义

  • 我在Spring应用程序中有不同的用户类型。我实现了某种继承。所有users类型都从User类扩展而来。我想这里两张桌子应该够了: 表“users”-包含所有共享实体属性的列 表“users_corporate”-包含CorporateCustomer类attriburtes:companyName和VatNumber的列 “用户”将具有:id、用户名、密码、第一名、最后名、电子邮件、手机、城市、