【发布时间】:2020-11-10 22:07:29
【问题描述】:
我正在开发一个代码分析器,我正在尝试识别 Python 中的函数或类中引用的所有类类型。
例如说我有这个类:
import collections
Bar = collections.namedtuple('Bar', ['bar'])
Baz = collections.namedtuple('Baz', ['baz'])
class Foo(object):
def get_bar(self):
return Bar(1)
def get_baz(self):
return Baz(2)
我正在寻找一种方法来获取函数和类的类型。像这样的:
print(get_types(Foo.get_bar)) # ['Bar']
print(get_types(Foo.get_baz)) # ['Baz']
print(get_types(Foo)) # ['Bar','Baz']
【问题讨论】:
-
有趣,我怀疑
inspect中有一个方法可以帮助实现这一目标 -
This answer 看起来可能有助于解决您的问题。
-
您是否在寻找类型注释?注意
return Bar(1)是否返回Bar、其他类型、随机类型或因异常而爆炸无法仅从该源代码中得知。您愿意对您的代码做出哪些假设? -
@MisterMiyagi 类型注释可以工作,但需要我们通过许多没有它们的旧代码重新添加它们。这是一个潜在的解决途径。我真正要寻找的是每个函数中的所有 ORM 类型(我们使用 Peewee),因此我们可以确定哪些函数涉及哪些 DB 表。函数的执行对此并不重要,只要源在其逻辑的任何分支中包含该类型即可。
标签: python python-3.x introspection