检查函数是否在Python类中定义
在Python 3.7+中,检查函数是否在Python类中定义的正确方法是什么。例如:检查函数是否在Python类中定义,python,function,class,methods,inspect,Python,Function,Class,Methods,Inspect,在Python 3.7+中,检查函数是否在Python类中定义的正确方法是什么。例如: class A: def fun1(self): pass def fun2(): pass 我想区分A.fun1是在类中定义的,而fun2不是 您可以使用属性(在中定义)并检查它是否包含指示此对象是在嵌套范围中定义的。请注意,这也适用于在其他函数中定义的函数,因此它可能会给您带来这种意义上的误报 >>> def test(): ... ... >
class A:
def fun1(self):
pass
def fun2():
pass
我想区分A.fun1
是在类中定义的,而fun2
不是
您可以使用属性(在中定义)并检查它是否包含指示此对象是在嵌套范围中定义的
。请注意,这也适用于在其他函数中定义的函数,因此它可能会给您带来这种意义上的误报
>>> def test(): ...
...
>>> test.__qualname__
'test'
>>> class Foo:
... def test(self): ...
...
>>> Foo.test.__qualname__
'Foo.test'
>>> def f():
... def g(): ...
... return g
...
>>> f().__qualname__
'f.<locals>.g'
>def test():。。。
...
>>>测试名称__
“测试”
>>>Foo类:
... def测试(自身):。。。
...
>>>Foo.test.\uuuuu qualname__
“Foo.test”
>>>def():
... def g():。。。
... 返回g
...
>>>f()__
“f..g”
OP想检查它是一个类方法还是一个函数,而不是该类是否有一个方法,我的答案如何不能解决这个问题?方法不是函数,你的方法也适用于普通属性方法是在类中定义的函数。确定类是否具有特定的函数与OP要求的“区分该函数是在类中定义的”完全相同。在不知道OP的意思的情况下回答问题并不是真正有效的,可以使用注释来澄清您所问的magic(a.fun1)
应返回True
和magic(fun2)
应该返回False
,对吗?这样做有什么意义?你想解决什么问题?有和<应该对对象调用code>ismethod。执行以下操作:print(inspect.ismethod(A().fun1),inspect.isfunction(A().fun1));打印(inspect.ismethod(fun2)、inspect.isfunction(fun2))
@decezeExactly@Arty正如您所指出的,is方法需要实例化类,这在某些情况下可能不可能、也不容易或有副作用。
>>> def test(): ...
...
>>> test.__qualname__
'test'
>>> class Foo:
... def test(self): ...
...
>>> Foo.test.__qualname__
'Foo.test'
>>> def f():
... def g(): ...
... return g
...
>>> f().__qualname__
'f.<locals>.g'