inspect.getmembers in order?

后端 未结 6 1920
栀梦
栀梦 2021-01-01 10:54
inspect.getmembers(object[, predicate])

Return all the members of an object in a list of (name, value) pairs sorted by nam

6条回答
  •  南方客
    南方客 (楼主)
    2021-01-01 11:34

    You can dig around to find the line number for methods, not sure about other members:

    import inspect
    
    class A:
        def one(self):
            pass
    
        def two(self):
            pass
    
        def three(self):
            pass
    
        def four(self):
            pass
    
    def linenumber_of_member(m):
        try:
            return m[1].__func__.__code__.co_firstlineno
        except AttributeError:
            return -1
    
    a = A()
    l = inspect.getmembers(a)
    print(l)
    l.sort(key=linenumber_of_member)
    print(l)
    

    prints:

    [('__doc__', None), ('__module__', '__main__'), ('four', >), ('one', >), ('three', >), ('two', >)]
    [('__doc__', None), ('__module__', '__main__'), ('one', >), ('two', >), ('three', >), ('four', >)]
    

提交回复
热议问题