![](/img/trans.png)
[英]Python: How to get all the parent classes and function names in one array within that function
[英]How to get all names of a classes' classmethods in Python
我想通過代碼反射找出下面類Something
所有類方法。 對於所有類方法,我的意思是所有用@classmethod
。 我實際上不知道這是否相同。
class Something:
@classmethod
def a(cls):
print('a')
@staticmethod
def b(cls):
print('b')
def c(self):
print('c')
所以在這種情況下,我希望得到一個只包含'a'
的列表:
get_classmethod_names(Something) == ['a']
這可以像遍歷 classes 屬性並檢查classmethod
對象一樣簡單:
In [1]: class Something:
...: @classmethod
...: def a(cls):
...: print('a')
...:
...: @staticmethod
...: def b(cls):
...: print('b')
...:
...: def c(self):
...: print('c')
...:
In [2]: [attr for attr, obj in vars(Something).items() if isinstance(obj, classmethod)]
Out[2]: ['a']
請注意,如果您關心繼承的類方法,那么您必須為類的方法解析順序中的每個類檢查它,因此:
In [3]: class BaseSomething:
...: @classmethod
...: def u(cls):
...: print('u')
...:
...: class Something(BaseSomething):
...: @classmethod
...: def a(cls):
...: print('a')
...:
...: @staticmethod
...: def b(cls):
...: print('b')
...:
...: def c(self):
...: print('c')
...:
In [4]: Something.mro()
Out[4]: [__main__.Something, __main__.BaseSomething, object]
In [5]: [
...: attr
...: for cls in Something.mro()
...: for attr, obj in vars(cls).items()
...: if isinstance(obj, classmethod)
...: ]
Out[5]: ['a', 'u']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.