令人困惑的语法:“来自smbus import SMBus”

时间:2015-11-21 02:58:10

标签: python

我只是学习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

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

来自各种github示例

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

1 个答案:

答案 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中导入内容使其在您当前的命名空间中可用。面向对象的编程封装了对象中的方法;您使用该对象作为句柄来访问其方法,因此您只能导入该对象本身。其中一个好处是,当您引用导入对象的方法和属性中的内容时,您的程序的名称空间(您以名字为基础访问的内容的数量)保持相对清晰,并且清晰明确 - 但相当简洁。