我正在尝试编写 - 并理解 - 一些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
所以问题是,这个函数的实际实现在哪里?这个空体的重点是什么? (只是传递关键字和文档)此方法如何以及由谁覆盖并获得所需的功能?
答案 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,它自动生成这些。