2015-11-21 2 views
0

Я просто изучаю Python, и меня смущает синтаксис smbus-импорта и instancing (?). Я использую RasPi с Джесси.сбивающий синтаксис: «from smbus import SMBus»

В приведенных ниже примерах каждый из них ссылается на функцию (?) С именем «SMBus», которая указывает, какая из аппаратных шин будет использоваться для этой связи.

Мое понимание Python заключается в том, что значительная капитализация делает smbus не такой, как SMBus. Моя путаница двояка:

1) Я не могу найти ссылку на функцию Smbus «SMBus»

2) в примере кода Erazor-зоны я думаю только функция 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) 
+0

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

+2

Вкратце, это похоже на то, что 'SMBus' является _class_ в модуле' smbus'. – TigerhawkT3

+0

Спасибо TigerhawkT3 .. кратким, но прямо на цель. Расторгнул это для меня. – JonRob

ответ

2

соус для этого модуля написан на C.

Я не могу подключиться к http://lm-sensors.org/ но искать PyMethodDef в источниках пакетов Debian на https://sources.debian.net/src/i2c-tools/3.1.1-1/py-smbus/smbusmodule.c/

При импорте класс, вы также получаете доступ к его методам; но вы обращаетесь к ним через класс или экземпляр объекта. Поэтому вам не нужно или нужно импортировать метод read_byte_dataSMBus, потому что при нормальном использовании вы всегда ссылаетесь на него как b.read_byte_data, где b - это пример SMBus, как в первом примере.

На всякий случай это не совсем понятно, импорт чего-то в Python делает его доступным в вашем текущем пространстве имен. Объектно-ориентированное программирование инкапсулирует методы внутри объекта; вы используете объект как дескриптор для доступа к его методам, поэтому вы импортируете сам объект. Одно из преимуществ заключается в том, что пространство имен вашей программы (количество вещей, к которым вы обращаетесь на основе имени) остается относительно чистым, и оно ясное и явное - но достаточно сжатое - когда вы ссылаетесь на вещи в методах и свойствах импортируемого объекта.

+0

Не стесняйтесь обновлять этот ответ ссылкой на авторитетный источник, если/когда он снова станет доступен. – tripleee

+0

Чтобы добавить дополнительный бит интерфейса WRT OO, функция 'SMBus()' является * конструктором *, который получает свое имя из класса 'SMBus' * *. – delicateLatticeworkFever

+0

Спасибо, тройной, я вижу это прямо сейчас.Я думаю, что я был доволен документацией (или отсутствием). – JonRob

Смежные вопросы