Я только что закончил небольшой модуль gpio, полностью состоящий из python3, для использования с Linux gpiolib. Я играл с двумя разными способами именования и импорта вещей в клиенте:
gpio.py
class GPIOInput(object):
...
class GPIOEvent(object):
...
class GPIOOutput(object):
...
client.py
from gpio import GPIOEvent, GPIOOutput, GPIOInput
irq = GPIOEvent(1, 14)
gpio.py
class Input(object):
...
class Event(object):
...
class Output(object):
...
client.py
import gpio
irq = gpio.Event(1, 14)
Вопрос: есть ли веская / конкретная причина предпочесть одно другому? Или это просто предпочтение?
Нет (для меня) действительно счастливого гибрида. Мне нравятся короткие имена, когда они находятся внутри модуля, но если они используются вне модуля, действительно нужно имя модуля, чтобы определить, что они собой представляют. Но импорт gpio, а затем обращение к gpio.GPIOOutput кажется излишним.
Я думаю, что import * - это то, что никогда не поощрялось, кроме repl.
Это зависит от личных предпочтений. Если я использую только один класс в модуле, я предпочитаю использовать из класса импорта модуля. Если я использую несколько классов, я просто использую модуль импорта.






PEP8 выступает за gpio.Input() и т. д.
There's also the style of using a short unique prefix to group related names together. This is not used much in Python, ...
In Python, this style is generally deemed unnecessary because attribute and method names are prefixed with an object, and function names are prefixed with a module name.
Я согласен, вы в основном видите этот тип именования в C, где у вас не очень хорошее пространство имен.
Я действительно думаю, что это зависит от варианта использования. Если вы собираетесь заставить людей делать такие вещи, как
from gpio import *, тогда да, используйте схему префиксовGPIO.