Python3模块导入/命名困境

3

我刚刚完成了一个基于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 前缀方案吧。 - mustachioed
1
我认为 import * 是一种从未被鼓励的做法,除了在 repl 中。 - Travis Griggs
1
这取决于个人喜好。如果我在一个模块中只使用一个类,那么我更喜欢使用 from module import class。如果我使用多个类,则直接使用 import module 即可。 - Joshua Yonathan
1个回答

5

PEP8认为应该使用gpio.Input()等方式。

还有一种使用短唯一前缀将相关名称分组的风格。这在Python中很少使用,...

在Python中,这种风格通常被认为是不必要的,因为属性和方法名称都带有对象前缀,函数名称都带有模块名称前缀。


我同意,你通常会在C语言中看到这种类型的命名,因为它没有很好的命名空间。 - mustachioed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接