2015-09-14 105 views
1

我想寫 - 並理解 - 一些python代碼,我一直在努力實現如何導入python庫。讓我描述一下我的情況。Python庫模塊實現

我想模擬一個覆盆子pi唯一python庫(RPi.GPIO)爲了在我的(x86)筆記本電腦上運行一些unittests。爲了做到這一點,我想我應該只定義與GPIO類相同的函數,變量,並且具有所有的功能(僅傳遞)。所以我看了一下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

Python有一個'__import__'方法,當你導入某個東西的時候,它就是所謂的。您可能必須重寫以獲取該事件。以下是相關文檔:https://docs.python.org/2/library/functions.html#__import__ – Zizouz212

+0

也許這是源代碼:http://sourceforge.net/p/raspberry-gpio-python/code/ci /default/tree/source/py_gpio.c#l676。如果您熟悉Java,那麼可以將Python庫編寫爲Python,它看起來類似於JNI開發。 –

回答

0

add_event_detect實際的實現是原生的C代碼,你可以在當地的virtualenv文件夾中找到(或如@Jean榮格表示的意見, this online implementation RPi.GPIO的。

Python模塊可完全是用Python編寫的,但擴展常常用C語言編寫,如the Python docs描述。

你看到存根實現(其實現只是pass)是基於本機實現生成的。我懷疑你正在使用PyCharm,它自動生成這些。

+0

Yeap我正在使用PyCharm。謝謝(你的)信息! – sestus