在Python包中列出具有相同名称的方法

在Python包中列出具有相同名称的方法,python,python-2.7,Python,Python 2.7,我正在编写一个Python包,其中包含不同的类,使用一个名为map的通用方法。该方法总是返回一个函数,并打算在另一个包的方法中使用。有没有一种方法可以列出我的包中所有被称为map的方法?您需要仔细思考一下这个方法。您需要执行的步骤是加载给定模块的引用,获取类列表,然后检查每个类,以确保其具有方法映射: import sys, inspect def map_classes(module_name): for name, obj in inspect.getmembers(sys.modul

我正在编写一个Python包,其中包含不同的
,使用一个名为
map
的通用方法。该方法总是返回一个函数,并打算在另一个包的方法中使用。有没有一种方法可以列出我的包中所有被称为
map
的方法?

您需要仔细思考一下这个方法。您需要执行的步骤是加载给定模块的引用,获取类列表,然后检查每个类,以确保其具有方法
映射

import sys, inspect

def map_classes(module_name):
  for name, obj in inspect.getmembers(sys.modules[module_name]):
    if inspect.isclass(obj):
      try:
        if callable(getattr(obj, 'map')):
          yield name
      except AttributeError:
        pass

此方法将返回模块中具有
map
方法的所有类的所有名称的生成器。注意,如果它们具有
映射
属性,则不会返回类的名称。

您不需要
检查
包。你需要的一切都是内置的

>>> import numpy as np
>>> for name, obj in np.__dict__.items():
...   if hasattr(obj,"tolist"):
...     print name, obj

这不适用于继承的方法。不过,带有固定名称的普通
hasattr
/
getattr
将内置
inspect
<代码>numpy不是。@zondo??这只是以检查
numpy
为例
numpy
不是这个过程中不可分割的一部分。@9000我不知道你的意思。>>A类:。。。def blah(self):。。。返回5…>>>B(A)类:。。。通过…>>>史考特:的确,
hasattr
确实有效<代码>\uuuu dict\uuuuu.items(),如答案中所示,没有。也就是说,
\uuu dict\uuu
将不包括继承的属性名称,而
hasattr
执行必要的MRO查找。