[英]How to find if python object is a function or class method?
讓我們以這個例子為例:
class Foo:
def func(self):
pass
def func():
pass
f1 = Foo.func
f2 = func
我正在檢查代碼並想從dir
找出或inspect
f1
是否是類方法而f2
是不屬於任何類的函數?
內置inspect模塊有ismember和isfunction方法, https: //docs.python.org/3/library/inspect.html
但是,除非您正在做一些相當深奧的事情,否則用戶代碼應該無關緊要。
編輯:如果您正在做一些深奧的事情,請注意在原始問題中您詢問的是Foo
類上的屬性,而不是Foo
實例上的屬性。 這有區別:
In [1]: def f(): return None
In [2]: class F:
...: def f(self):
...: return None
...:
In [3]: import inspect
In [4]: [inspect.isfunction(_) for _ in [f, F.f, F().f]]
Out[4]: [True, True, False]
In [5]: [inspect.ismethod(_) for _ in [f, F.f, F().f]]
Out[5]: [False, False, True]
此時我發現的唯一東西是obj.__qualname__
- 如果它包含一個點 - 這意味着它是類的一個方法
但我不是 100% 確定這是完美的解決方案
只需打印函數名稱:
print('f1 =',f1)
print('f2 =',f2)
輸出是:
f1 = <function Foo.func at 0x7f56105f3620>
f2 = <function func at 0x7f5611ce7e18>
這給出了完整的函數名稱,如果它是Foo.func
的類方法,則包括父類名稱
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.