我试图模仿来自Ruby的methods.grep
,它只返回被调用的任何对象(类或实例)的可用方法列表,通过传递给grep
的regexp模式进行过滤。
在交互式提示中调查对象非常方便。
def methods_grep(self, pattern):
""" returns list of object's method by a regexp pattern """
from re import search
return [meth_name for meth_name in dir(self) \
if search(pattern, meth_name)]
由于Python的限制对我来说不太清楚,遗憾的是它不能简单地插入object
类祖先:
object.mgrep = classmethod(methods_grep)
# TypeError: can't set attributes of built-in/extension type 'object'
是否有一些解决方法如何注入所有类,或者我是否必须坚持使用像dir
这样的全局函数?
答案 0 :(得分:4)
有一个名为forbiddenfruit
的模块,可以修补内置对象。它还允许您撤消更改。你可以在https://pypi.python.org/pypi/forbiddenfruit/0.1.1
from forbiddenfruit import curse
curse(object, "methods_grep", classmethod(methods_grep))
当然,在生产代码中使用它可能是一个坏主意。
答案 1 :(得分:2)
AFAIK没有解决方法。我觉得你不能改变内置类很烦人。个人意见。
一种方法是创建一个基础对象并强制所有对象继承它。
但我不认为这个问题是诚实的。你可以简单地使用methods_grep(object, pattern)
,对吗?你不必将它插入任何地方。