相关疑难解决方法(0)

查找Python对象具有的方法

给定一个任何类型的Python对象,是否有一种简单的方法来获取该对象具有的所有方法的列表?

要么,

如果这是不可能的,至少有一种简单的方法来检查它是否有一个特定的方法,而不仅仅是检查方法被调用时是否发生错误?

python introspection

379
推荐指数
12
解决办法
32万
查看次数


Python C扩展:文档的方法签名?

我正在编写C扩展,我想让我的方法的签名可见为内省.

static PyObject* foo(PyObject *self, PyObject *args) {

    /* blabla [...] */

}

PyDoc_STRVAR(
    foo_doc,
    "Great example function\n"
    "Arguments: (timeout, flags=None)\n"
    "Doc blahblah doc doc doc.");

static PyMethodDef methods[] = {
    {"foo", foo, METH_VARARGS, foo_doc},
    {NULL},
};

PyMODINIT_FUNC init_myexample(void) {
    (void) Py_InitModule3("_myexample", methods, "a simple example module");
}
Run Code Online (Sandbox Code Playgroud)

现在,如果(在构建它之后......)我加载模块并查看它的帮助:

>>> import _myexample
>>> help(_myexample)
Run Code Online (Sandbox Code Playgroud)

我会得到:

Help on module _myexample:

NAME
    _myexample - a simple example module

FILE
    /path/to/module/_myexample.so

FUNCTIONS
    foo(...)
        Great example function
        Arguments: (timeout, flags=None)
        Doc blahblah doc doc …
Run Code Online (Sandbox Code Playgroud)

python documentation python-c-api

12
推荐指数
2
解决办法
1632
查看次数

Python inspect.getargspec具有内置函数

我试图弄清楚从模块中检索的方法的参数.我发现了一个inspect带有便利功能的模块getargspec.它适用于我定义的函数,但不适用于导入模块的函数.

import math, inspect
def foobar(a,b=11): pass
inspect.getargspec(foobar)  # this works
inspect.getargspec(math.sin) # this doesn't
Run Code Online (Sandbox Code Playgroud)

我会收到这样的错误:

   File "C:\...\Python 2.5\Lib\inspect.py", line 743, in getargspec
     raise TypeError('arg is not a Python function')
 TypeError: arg is not a Python function
Run Code Online (Sandbox Code Playgroud)

被inspect.getargspec设计为仅供本地功能还是我做错了什么?

python methods arguments function inspect

6
推荐指数
1
解决办法
3658
查看次数

如何在文档中显示 Cython 函数的参数?

以下代码定义了一个简单的 Cython 函数(为了方便起见,使用 Ipython magic)。

%load_ext cython
%%cython
def f(float x, float y=2):
    return x+y
Run Code Online (Sandbox Code Playgroud)

然后,调用help(f)会给出以下消息:

Help on built-in function f in module _cython_magic_e37eeabbc63d5167217465ba978239fc:

f(...)
Run Code Online (Sandbox Code Playgroud)

f请注意,未显示 的参数。此外,制表符补全对于 ipython 中的参数名称也不起作用(例如键入f(xthen tab)。

如果我在不使用 Cython 的情况下定义此函数:

def g(x, y=2):
    return x+y
Run Code Online (Sandbox Code Playgroud)

调用help(g)给出了这个并且制表符完成按预期工作:

Help on function g in module __main__:

g(x, y=2)
Run Code Online (Sandbox Code Playgroud)

有没有办法通过 Cython 函数获得这种行为?我尝试使用def, cdef, cpdef, 有或没有 ipython 魔法,但没有成功。

cython

4
推荐指数
1
解决办法
1471
查看次数