我有一个通用的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
宏。
答案 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
包含doSomething
和doSomethingElse
,第一行将为您提供两者(您可以像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()
这意味着通用文件被完全隐藏,并且我项目的功能不依赖于导入顺序(这似乎很冒险)。
注意:我的整理工具对此非常疯狂,因此我不确定它是否是预期的/受支持的,更不用说好的做法了?