Pythonic:代码名称与内置冲突

时间:2012-02-21 23:46:42

标签: package python built-in

我目前正在创建一个名为“SET”的代码。代码的名称是首字母缩略词,已经为许多(非编程)原因定义,因此无法更改。

问题:最简单的,我相信最终用户使用我的代码的痛苦方式就是命名包“set”。 但当然这是一个问题,因为这与内置的 set 函数冲突。

问题:有哪些可能的解决方案?有些可能(可能更多):

  1. 更改包名称(例如setb)。

    import setb
    

    我真的不愿意,因为那时它会与真实姓名不同

  2. 使包的名称为大写(SET)

    import SET
    

    这将是一个直接的解决方案,但我想知道:这是一个pythonic正确命名的包?此外,我觉得这有点痛苦,因为代码中定义的所有模块都会有类似“import SET.x.y ...”的东西(即大写,写了很多次)。但如果这是一种pythonic方式,这不是什么大问题。

  3. 保持名称“设置”

    import set
    

    这显然不太好。但只有当用户使用“导入集”时才会出现问题,不是吗?这不应该发生在“正常使用条件”中,因为代码将提供一些脚本来使用它,而不是将它用作标准的python模块。但我们永远不知道,它可以像它一样导入,甚至可能有一些我没有看到的问题(使用内置设置)。

  4. 我正在考虑解决方案2.但我真的不确定。也许这不合适,或者你们有更好的解决方案。

    PS:我在网上和stackoverflow上发现了一些类似的主题,但它通常会处理包内的脚本或模块内的名称。这里的问题实际上与代码的名称有关(只有这样才有意义),因此与包名称的正确命名有关。


    修改

    选择的解决方案:我选择使用“SET”作为包名称。虽然这里提出了许多好的建议:pyset,semt,setool ......或更明确的“starexoplanettool”(解释缩写)。谢谢大家。

    编辑#2

    我喜欢“有趣”的解决方案,即拥有一个名为S的软件包,以及一个子包,E ...最终获得:

        import S.E.T
    

    谢谢唐问题。

4 个答案:

答案 0 :(得分:6)

为什么不拼写首字母缩略词背后的含义,如果用户迫切需要更短的名字,他们可以import someetymologyterm as SET或他们喜欢的任何东西。 Python为他们提供了选择,所以它不是世界的终点。

答案 1 :(得分:5)

  

这是一个包的pythonic正确命名吗?

在这种情况下,没关系。

领先的大写很少见(ConfigParser,HTMLParser)。 Camel-case很少见(cStringIO)。 但这并不能使所有大写错误。

这只是意味着你下次应该选择一个更好的首字母缩略词。

“set”是定义数量最多的英文单词。这是单一最差的首字母缩略词选择。

关键是不要遵守或多或少可接受的行为的社区“标准”。

重点是写一些有用的东西。

  

(即大写,写了很多次)。

几乎没有问题。人们实际上运行软件的次数比他们写的要多。

人们阅读和调整的次数也多于写作。

如果您担心拼写错误,可以复制并粘贴。

此外,即使像Komodo Edit这样便宜的IDE也可以找到如何使用长名称来完成已安装模块的代码。

答案 2 :(得分:3)

如果你必须选择这样一个不幸的名字,你可能会使屁股的痛苦成为具有讽刺意味的诅咒!只需创建一个带有子包“E”的主包“S”,其中包含一个子包“T”。 然后你可以做一个:

import S.E.T 

from s.e.t import xyz

import s.e.t as set_

你甚至可以在main-pacakge的__init__.py文件中做一些vodoo; - )

只需2美分!

答案 3 :(得分:0)

也许我没有得到它,但这看起来就像命名空间问题。

这是一条出路。将set.py的路径添加到sys.path之前导入之前。您可以将此包装在导入后退出更改的函数中。

我在火车上所以不能测试这个但是我会尝试。