我只是学习Python而且我对smbus导入和实例化(?)的语法感到困惑。我和Jesse一起使用RasPi。
在下面的示例中,每个似乎都引用了一个名为“SMBus”的函数(?),它指定了哪些硬件总线将用于此通信。
我对Python的理解是资本化很重要 使smbus与SMBus不一样。我的困惑是双重的:
1)我找不到任何对smbus函数“SMBus”的引用
2)在erazor-zone示例代码中,我认为只导入了smbus中的SMBus函数,并且smbus中的所有其他函数都不可用。
任何人都可以解释我的想法误入歧途吗?
由于
JonRob
以下两种结构都来自互联网:
来自http://wiki.erazor-zone.de/wiki:linux:python:smbus:doc 的
或 来自各种github示例 from smbus import SMBus
b = SMBus(0)
b.read_byte_data(0x2f,0x58)
import smbus
self.bus = smbus.SMBus(0)
答案 0 :(得分:2)
此模块的源代码用C语言编写。
我无法连接到http://lm-sensors.org/,但在https://sources.debian.net/src/i2c-tools/3.1.1-1/py-smbus/smbusmodule.c/
的Debian软件包源中搜索PyMethodDef
导入类时,您也可以访问其方法;但是你通过类或对象实例来引用它们。因此,您不希望或不需要导入read_byte_data
的{{1}}方法,因为在正常使用中,您始终将其称为SMBus
,其中b.read_byte_data
是{{1}实例,就像你的第一个例子一样。
为了防止这种情况不完全清楚,在Python中导入内容使其在您当前的命名空间中可用。面向对象的编程封装了对象中的方法;您使用该对象作为句柄来访问其方法,因此您只能导入该对象本身。其中一个好处是,当您引用导入对象的方法和属性中的内容时,您的程序的名称空间(您以名字为基础访问的内容的数量)保持相对清晰,并且清晰明确 - 但相当简洁。