如何在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']
胡安帕·阿里维利亚加

这可以简单地遍历class属性并检查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']

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何获取在类的方法中定义的所有变量的名称

从python目录中获取所有模块名称,类名称和方法名称

如何仅在类中获取所有属性名称

如何在Iframe PEGA中按类名称获取所有元素

如何在打字稿中排除方法的类中的所有属性的属性名称

如何在 Python 中按名称获取类

如何在通用Lisp中获取类的所有实例?

如何在iModel.js中获取所有类

如何在跨度类中获取所有标签innerHTML

如何获取嵌套对象中的所有名称?

如何在同一个基类的方法中获取所有属性?

如何在python中以列表的形式获取类的所有属性

如何在python中按顺序获取类的所有成员?

Python正则表达式-如何获取一行中的所有名称?

如何使用Groovy获取没有继承方法的类的所有方法名称?

如何获取当前名称范围中的所有类,变量,函数名称?

获取另一个类的属性的所有名称-Unity 5 C#

获取Python中类的所有属性

在python的类中获取所有常量

如何在Spacy中获取所有名词短语

从 C# 中的类中获取所有属性名称

如何在Python中的所有类方法中使用全局变量?

在Python中获取当前文件中类的所有类方法?

如何使用变量的类名访问PHP中带有名称空间的类常量?

如何装饰python中的所有函数和类方法?

如何在Spacy(Python)中获取所有名词短语

c ++宏导入基本模板类的所有名称

在Scrapy中获取所有Spider类的名称

是否有内置方法从Python所有基类中获取所有__annotations__?