Дилемма импорта / именования модуля Python3

Я только что закончил небольшой модуль gpio, полностью состоящий из python3, для использования с Linux gpiolib. Я играл с двумя разными способами именования и импорта вещей в клиенте:

1

gpio.py

class GPIOInput(object):
    ...

class GPIOEvent(object):
    ...

class GPIOOutput(object):
    ...

client.py

from gpio import GPIOEvent, GPIOOutput, GPIOInput

irq = GPIOEvent(1, 14)

2

gpio.py

class Input(object):
    ...

class Event(object):
    ...

class Output(object):
    ...

client.py

import gpio

irq = gpio.Event(1, 14)

Вопрос: есть ли веская / конкретная причина предпочесть одно другому? Или это просто предпочтение?

Нет (для меня) действительно счастливого гибрида. Мне нравятся короткие имена, когда они находятся внутри модуля, но если они используются вне модуля, действительно нужно имя модуля, чтобы определить, что они собой представляют. Но импорт gpio, а затем обращение к gpio.GPIOOutput кажется излишним.

Я действительно думаю, что это зависит от варианта использования. Если вы собираетесь заставить людей делать такие вещи, как from gpio import *, тогда да, используйте схему префиксов GPIO.

mustachioed 25.04.2018 21:48

Я думаю, что import * - это то, что никогда не поощрялось, кроме repl.

Travis Griggs 25.04.2018 21:49

Это зависит от личных предпочтений. Если я использую только один класс в модуле, я предпочитаю использовать из класса импорта модуля. Если я использую несколько классов, я просто использую модуль импорта.

Joshua Yonathan 25.04.2018 21:52
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
3
41
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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, где у вас не очень хорошее пространство имен.

mustachioed 25.04.2018 21:51

Другие вопросы по теме