在Python包中列出具有相同名称的方法
我正在编写一个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
类
,使用一个名为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查找。