Python库模块实现

时间:2015-09-14 19:25:43

标签: python

我正在尝试编写 - 并理解 - 一些python代码,我一直在努力实现如何导入python库。让我来描述我的情况。

我正在尝试模拟一个只有raspberry-pi的python库(RPi.GPIO),以便在我的(x86)笔记本电脑中运行一些单元测试。为了实现这一点,我认为我应该定义与GPIO类相同的函数,变量,并具有所有函数emtpy(只是传递)。所以我看了一下RPi.GPIO模块。

虽然我认为我会在那里找到GPIO类方法的实际实现,但实际上我发现它们的身体是空的。例如:

def add_event_detect(*args, **kwargs): # real signature unknown
    """
    Enable edge detection events for a particular GPIO channel.
    channel      - either board pin number or BCM number depending on which mode is set.
    edge         - RISING, FALLING or BOTH
    [callback]   - A callback function for the event (optional)
    [bouncetime] - Switch bounce timeout in ms for callback
    """
    pass

所以问题是,这个函数的实际实现在哪里?这个空体的重点是什么? (只是传递关键字和文档)此方法如何以及由谁覆盖并获得所需的功能?

2 个答案:

答案 0 :(得分:0)

它应该是C函数的包装器。 如果你想像Zizouz212那样覆盖__import__,请改用导入钩子。

这是一个描述导入钩子的PEP: https://www.python.org/dev/peps/pep-0302/

答案 1 :(得分:0)

add_event_detect的实际实现是在本机C代码中,您可以在本地virtualenv文件夹中找到(或者,如@Jean Jung在RPi.GPIO的注释中this online implementation所示。 / p>

Python模块可以完全用Python编写,但扩展通常用C编写,如the Python docs中所述。

您看到的存根实现(其实现只是pass)是基于本机实现生成的。我怀疑你正在使用PyCharm,它自动生成这些。