gpt4 book ai didi

python inspect.getsource 获取错误源

转载 作者:太空宇宙 更新时间:2023-11-04 03:46:59 26 4
gpt4 key购买 nike

运行这个文件 foo.py

import inspect

class Parent(object):
def source1(self):
class A(object):
def foo(self):
pass
print inspect.getsource(A)
def source2(self):
class A(object):
def bar(self, a, b, c):
pass
print inspect.getsource(A)


parent = Parent()
parent.source1()
parent.source2()

产生这个输出:

    class A(object):
def foo(self):
pass

class A(object):
def foo(self):
pass

当我期望它产生这个输出时:

    class A(object):
def foo(self):
pass

class A(object):
def bar(self, a, b, c):
pass

我在测试中遇到了这个问题。我将名称 AB 重用于测试方法主体中的类名。我正在测试一个依赖于 inspect.getsource 的函数,嗯......它不起作用,因为后来的测试从早期命名的 AB 类。

最佳答案

inspect.getsource 调用实际上解析源文件,查找类定义,并返回它在最低缩进级别找到的第一个类定义及其要查找的名称。换句话说,它不会执行您要求它执行的操作。

这是一种略有不同的方法,它会产生您正在寻找的输出,并且可能会满足您的需要:

import inspect

class Parent(object):
def source1(self):
class A1(object):
def foo(self):
pass
A = A1
print inspect.getsource(A)
def source2(self):
class A2(object):
def bar(self, a, b, c):
pass
A = A2
print inspect.getsource(A)


parent = Parent()
parent.source1()
parent.source2()

类定义仍然可以通过您想要的名称(例如“A”)引用,但源代码中的实际定义使用不同的名称,因此 getsource 可以找到它。

关于python inspect.getsource 获取错误源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23306489/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com