【问题标题】:python3 module import/naming dilemmapython3模块导入/命名困境
【发布时间】:2018-10-06 09:33:43
【问题描述】:

我刚刚完成了一个用于 Linux gpiolib 的小型全 python3 gpio 模块。我玩弄了两种在客户端中命名和导入事物的不同方式:

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 前缀方案。
  • 我认为import * 是除了repl 之外从不鼓励的东西。
  • 看个人喜好了。如果我只在一个模块中使用一个类,那么我更喜欢从模块导入类中使用。如果我使用多个类,那么我只需使用导入模块。

标签: python python-3.x naming-conventions python-module


【解决方案1】:

PEP8 支持gpio.Input()

还有一种使用简短的唯一前缀将相关名称组合在一起的风格。这在 Python 中用的不多,...

在 Python 中,这种样式通常被认为是不必要的,因为属性和方法名称以对象为前缀,而函数名称以模块名称为前缀。

【讨论】:

  • 我同意,你在 C 中经常看到这种类型的命名,你没有很好的命名空间。
猜你喜欢
  • 2016-03-20
  • 2015-01-27
  • 1970-01-01
  • 2019-09-24
  • 2020-08-13
  • 2018-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多