0

我怎样才能拥有一个包含类的所有功能但不按字母顺序重新排序的列表?因为实际上我有:

[ foo.__dict__.get(a) for a in dir(foo) if isinstance(foo.__dict__.get(a), types.FunctionType) ]

它返回给我一个列表但重新排序......我也尝试过使用装饰器:

def decorator ():
    listing = []
    def wrapped (func):
        listing.append(func)
        return func
    wrapped.listing = listing
    return wrapped

很好,但是,我需要在我的类的每个函数上添加一个装饰器......也许你有一些技巧?

4

1 回答 1

6

请参阅检查模块文档。函数对象具有 func_code属性,并且(根据文档-尚未对其进行测试)func_code应该具有co_firstlineno属性,该属性将是源文件中第一行代码的编号。

所以请尝试类似:

def getListOfClassFunctions(foo):
    '''foo - a class object'''
    funcList = [ foo.__dict__.get(a) for a in dir(foo) if isinstance(foo.__dict__.get(a), types.FunctionType)]
    funcList = filter(lambda x: x.func_code.co_filename == foo.__module__, funcList)  # Thanks Martijn Pieters for a hint!
    return sorted(key=lambda x: x.func_code.co_firstlineno, funcList)

编辑以将整个片段包装在一个函数中,并仅返回与类在同一模块中定义的函数。

于 2012-09-05T11:01:15.333 回答