我可以在没有类的情况下扩展通用文件吗?

时间:2019-06-05 06:07:23

标签: python import

我有一个通用的python文件,其中包含一些基本功能。它没有class-仅def个。

我还有几个特定的​​文件,这些文件使用通用文件中的相同功能,有时还使用它来扩展/替换功能。同样,这些没有任何类。他们只是导入通用函数。

导入这些文件时,必须像这样使用它们:

import genericFile as gf
import specificFile as sf

gf.doSomething()
gf.doSomethingElse() # BUG - This was replaced by a specific one.
# I should have used "sf.doSomethingElse()", but I'm a meatbag who makes mistakes
....
sf.doLastThing() # ERROR - This should be generic. There is no specific one.

有什么方法可以将所有功能从第一个通用文件导入到特定文件中,并且导入特定的文件,以保持代码的清洁,可读和错误-免费吗?

我知道使用类很容易,但是我要问是否支持这种特殊情况。它可能类似于#include中的C宏。

4 个答案:

答案 0 :(得分:1)

这应该起作用,因为第二个导入中的功能将覆盖第一个:

from genericFile import *
from specificFile import *

doSomething()
doSomethingElse()
doLastThing()

答案 1 :(得分:1)

从所需文件中仅导入所需功能 例如

from gebericFile import doSomething, doLastThing
from specificFile import doSomethingElse

doSomething()
doSomethigElse()
doLastThing()

那也许你需要考虑更好的项目/程序包结构

答案 2 :(得分:1)

听起来您想要from x import *from x import func_a, func_b的组合:

from genericFile import *
from specificFile import doSomethingElse

如果genericFile包含doSomethingdoSomethingElse,第一行将为您提供两者(您可以像doSomething()和{{1 }},没有像doSomethingElse()genericFile这样的前缀。

如果gf包含specificFile,则第二行将覆盖您范围内的doSomethingElse。现在,如果您呼叫doSomethingElse,它将呼叫doSomethingElse()中的一个。

答案 3 :(得分:0)

每个人发布的解决方案帮助我得出了一个略有不同的答案。我对其进行了测试,发现是否specificFile包含导入内容:

from genericFile import *

然后在任何其他文件中,我都可以仅导入特定文件,并且可以将导入正确地链接到该文件:

import specificFile as sf

# All of these always get the most specific version.
sf.doSomething()
sf.doSomethingElse()
sf.doLastThing()

这意味着通用文件被完全隐藏,并且我项目的功能不依赖于导入顺序(这似乎很冒险)。


注意:我的整理工具对此非常疯狂,因此我不确定它是否是预期的/受支持的,更不用说好的做法了?