我在我的系统上安装了一个python模块,我希望能够看到它中有哪些函数/类/方法.
我想在每一个上调用doc函数.在ruby中,我可以执行类似ClassName.methods的操作,以获取该类上可用的所有方法的列表.python中有类似的东西吗?
例如.就像是:
from somemodule import foo
print foo.methods # or whatever is the correct method to call
Run Code Online (Sandbox Code Playgroud) 我已经看到很多人从模块中提取所有类的例子,通常是这样的:
# foo.py
class Foo:
pass
# test.py
import inspect
import foo
for name, obj in inspect.getmembers(foo):
if inspect.isclass(obj):
print obj
Run Code Online (Sandbox Code Playgroud)
真棒.
但我无法找到如何从当前模块中获取所有类.
# foo.py
import inspect
class Foo:
pass
def print_classes():
for name, obj in inspect.getmembers(???): # what do I do here?
if inspect.isclass(obj):
print obj
# test.py
import foo
foo.print_classes()
Run Code Online (Sandbox Code Playgroud)
这可能是非常明显的事情,但我找不到任何东西.谁能帮我吗?
给定一个函数对象,我该如何获得它的签名?例如,对于:
def myMethod(firt, second, third='something'):
pass
Run Code Online (Sandbox Code Playgroud)
我想得到"myMethod(firt, second, third='something')"
.
如何在警报框中检查对象?通常警告对象只会抛出节点名称:
alert(document);
Run Code Online (Sandbox Code Playgroud)
但我想在警告框中获取对象的属性和方法.如果可能,我该如何实现此功能?或者还有其他建议吗?
特别是,我正在寻找一个生产环境的解决方案,其中console.log和Firebug不可用.
如何获取用@ decorator2装饰的给定类A的所有方法?
class A():
def method_a(self):
pass
@decorator1
def method_b(self, b):
pass
@decorator2
def method_c(self, t=5):
pass
Run Code Online (Sandbox Code Playgroud) 我需要从被调用者那里获取调用者信息(什么文件/什么行).我了解到我可以使用inpect模块来达到目的,但不是如何.
如何通过检查获得这些信息?或者有没有其他方法来获取信息?
import inspect
print __file__
c=inspect.currentframe()
print c.f_lineno
def hello():
print inspect.stack
?? what file called me in what line?
hello()
Run Code Online (Sandbox Code Playgroud) 在什么情况下我想用一个而不是另一个?
有什么区别:
>>> import inspect
>>> print(inspect.getouterframes(inspect.currentframe()))
[(<frame object at 0x8fc262c>, '<stdin>', 1, '<module>', None, None)]
Run Code Online (Sandbox Code Playgroud)
和:
>>> import traceback
>>> traceback.extract_stack()
[('<stdin>', 1, '<module>', None)]
Run Code Online (Sandbox Code Playgroud)
更新:
另一个:
>>> import sys
>>> print(sys._getframe().f_trace,sys._getframe().f_code)
(None, <code object <module> at 0x8682a88, file "<stdin>", line 1>)
Run Code Online (Sandbox Code Playgroud)
我不明白这里的细微差别:
更新2,问题问题后的一段时间,但非常相关
我正在尝试使用函数式编程来创建包含键和要执行的函数的字典:
myDict={}
myItems=("P1","P2","P3",...."Pn")
def myMain(key):
def ExecP1():
pass
def ExecP2():
pass
def ExecP3():
pass
...
def ExecPn():
pass
Run Code Online (Sandbox Code Playgroud)
现在,我已经看到用于在模块中查找已定义函数的代码,我需要执行以下操作:
for myitem in myItems:
myDict[myitem] = ??? #to dynamically find the corresponding function
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,如何列出所有Exec
函数,然后使用字典将它们分配给所需的项目?所以最后我会myDict["P1"]() #this will call ExecP1()
我真正的问题是我有大量的这些项目,我创建了一个库来处理它们,所以最终用户只需要调用 myMain("P1")
我认为使用检查模块,但我不确定如何做到这一点.
我有理由避免:
def ExecPn():
pass
myDict["Pn"]=ExecPn
Run Code Online (Sandbox Code Playgroud)
是我必须保护代码,因为我使用它来提供我的应用程序中的脚本功能.
当我做:
IO.inspect [:right, :top, :left, ...very_long_list]
Run Code Online (Sandbox Code Playgroud)
我只得到第一项(这是解决15拼图的动作列表),如下所示:
[:right, :top, :left, :bot, :bot, :left, :top, :top, :right, :right, :bot,
:left, :bot, :left, :top, :right, :bot, :right, :top, :top, :left, :bot,
:left, :top, :right, :right, :bot, :bot, :left, :top, :top, :left, :bot,
:right, :top, :right, :bot, :left, :left, :top, :right, :bot, :right, :top,
:left, :left, :bot, ...] # => See the '...'
instead I would like
to get the complete list
Run Code Online (Sandbox Code Playgroud)
如何判断IO.inspect
不修剪清单?有选择还是什么?