对于任何随机函数,有没有办法做到这一点?
class Class:
def function(self):
pass
import inspect
print(inspect.getlineno(Class.function))
这只是给出:
File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\inspect.py", line 1479, in getlineno
return frame.f_lineno
AttributeError: 'function' object has no attribute 'f_lineno'
答案 0 :(得分:2)
inspect.getlineno
需要一个框架对象。
您应该改用inspect.getsourcelines
:
import inspect
class Class:
def function(self):
pass
print(inspect.getsourcelines(Class.function))
输出
([' def function(self):\n', ' pass\n'], 4)
它返回一个包含实际源代码和定义行号的2元组。
print(inspect.getsourcelines(Class.function)[1])
# 4
答案 1 :(得分:0)
您可以使用getsourcelines()
:
class Class:
def function(self):
pass
import inspect
ins = inspect.getsourcelines(Class.function)
print('Source:',ins[0])
print('Line:',ins[1])
输出:
Source: [' def function(self):\n', ' pass\n']
Line: 4
答案 2 :(得分:0)
以下将给出给定函数的源文件行号。
class Class:
def function(self):
pass
import inspect
function_definition = inspect.getsourcelines(Class.function)
for output in function_definition:
print(output)
答案 3 :(得分:0)
Class.function.__code__.co_firstlineno
表达式的运行速度应比运行inspect.getsourcelines(Class.function)
更快,并且还会为您提供行号。