有没有办法找到 class 何时在 python 中用于静态分析?

Is there are a way of finding when a class is used with static analysis in python?

我有一个中等规模的 monorepo 代码库。有两个 class 同名。我很想知道是否有一种方法可以找到其中一个 class 的用途,使用推理来区分 class 具有相同名称的元素。

示例:

# file client1.schema
class ObjectIdField: # <- I want to audit the uses of this class
    ...

# file client.schema
class ObjectIdField: # <- I don't want to audit the use of this class
   ...

# file project 1
from client1.schema import ObjectIdField
ObjectIdField()

# file project 2
from client2.schema import ObjectIdField
ObjectIdField()

你的导入语句是关键。

在您上面的示例中,您的静态分析可以解析 ObjectIdField 的所有代码,但 用法 from client1.schema.

正如@balderman 在评论中所建议的,您可以 select PyCharm 中 ObjectIdField() 和 Ctrl-B(“转到定义”)的对象实例化。这会将您带到 client1.schemaclient.schema 中的定义。 PyCharm 将从导入语句中找出哪一个是正确的。