2015-11-21 39 views
0

我剛剛學習Python,並且對smbus導入和實例化(?)的語法感到困惑。我正在和Jesse一起使用RasPi。混淆語法:「from smbus import SMBus」

在下面的示例中,每個似乎都指代名爲「SMBus」的函數(?),它指定將使用哪條硬件總線進行此通信。

我對Python的理解是大寫字母很重要 使得smbus與SMBus不一樣。我的困惑是雙重的:

1)我找不到在erazor區的示例代碼,我覺得只能由SMBus SMBus的功能正在導入和一個SMBus功能「的SMBus」

2)任何參考smbus中的所有其他功能都不可用。

任何人都可以解釋我的思想走向何方?

感謝

JonRob

下面的兩種結構是對從互聯網:

http://wiki.erazor-zone.de/wiki:linux:python:smbus:doc

from smbus import SMBus 
b = SMBus(0) 
b.read_byte_data(0x2f,0x58) 

從各種GitHub的例子

import smbus 
self.bus = smbus.SMBus(0) 
+0

https://docs.python.org/3.4/tutorial/modules.html – TigerhawkT3

+2

簡而言之,它看起來像'SMBus'是'smbus'模塊中的_class_。 – TigerhawkT3

+0

感謝TigerhawkT3 ..簡潔但正確的目標。爲我清理它。 – JonRob

回答

2

此模塊的烴源是用C寫

我無法連接到http://lm-sensors.org/https://sources.debian.net/src/i2c-tools/3.1.1-1/py-smbus/smbusmodule.c/

搜索在Debian軟件包來源PyMethodDef當進口一個類,你也可以訪問它的方法;但是通過類或對象實例引用它們。因此,您不需要或不需要導入SMBusread_byte_data方法,因爲在正常使用中,您總是將其稱爲b.read_byte_data,其中bSMBus實例,就像在第一個示例中一樣。

爲了防止這種情況不完全清楚,使用Python導入某些內容使其在當前名稱空間內可用。面向對象的程序設計將方法封裝在一個對象中;您使用該對象作爲訪問其方法的句柄,因此您只能導入該對象本身。其中一個好處是,當您在導入的對象的方法和屬性中引用事物時,程序的名稱空間(您在名字基礎上訪問的事物的數量)保持相對乾淨,並且清晰明確 - 但又非常簡潔。

+0

如果/當它再次變爲可用時,請隨時通過指向權威來源的鏈接更新此答案。 – tripleee

+0

爲了進一步澄清WRT OO接口,'SMBus()'函數是一個*構造函數*,它的名字來自'SMBus' * class *。 – delicateLatticeworkFever

+0

感謝tripleee,我現在明白了。我認爲我被捲入了文檔(或缺乏)。 – JonRob