如您所知,当项目的代码非常大并且在类中定义了如此多的属性和函数时,其中一些属性和函数永远不会被类的实例调用,也许其中一些已被丢弃。这是一个例子:
class Foo(object):
""""""
def __init__(self):
self.a = 1
self.b = 2
self.c = 3
...
self.y = 25
self.z = 26
def func1(self):
pass
def func2(self):
pass
def func3(self):
pass
...
...
def func100(self):
pass
if __name__ == '__main__':
f = Foo()
f.func1()
f.func2()
print f.a, f.b, f.z
在上面的代码中,类 Foo 的实例 f 刚刚调用 func1()和 func2()。以及如何查找从未被类实例调用的类的所有属性和函数。
我尝试了compiler
模块,但这无法解决我的问题。而dir(my_instance)
只是打印定义该类的所有函数和属性。
提前致谢。
答案 0 :(得分:1)
您可以尝试coverage.py
。这不是静态分析,而是实际运行你的代码并记录执行哪些语句,输出带注释的html或txt(你也可以很好地格式化)。然后,您可以查找其主体未执行的函数和方法。
这仍然不会处理未使用的属性。我不知道答案。也许可以一次一个地评论它们,看看测试是否仍然通过......
答案 1 :(得分:0)
很难证明在一般情况下使用或不使用某些内容。 Python是一种动态语言;如果即使一位代码调用代码,静态分析器也不能完全分析,它可能正在访问所提到的变量。
pylint
和flake8
工具会告诉您在使用之前未定义的本地和全局名称(除非您使用from x import *
样式导入来破坏它们),以及从未使用过的导入(从未使用的导入通常是错误的,但即便如此,它也可能是界面的有意识部分,其中必须保持沉默),但我不相信他们可以告诉你永远不会访问给定的属性;毕竟,其他人可以导入您的模块并访问所述属性。
答案 2 :(得分:0)
使用标准库中的profile模块。
python -m cProfile -o output_file myscript.py
然后加载stats文件并使用print_callees()
来获取在该程序运行期间调用的所有函数。
我不知道找出使用哪些属性的简单方法。