簡體   English   中英

如何查找python對象是函數還是類方法?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM