Python 根据选择将功能组织到模块中

Python 根据选择将功能组织到模块中,python,Python,我有两个Python模块(例如A.py和B.py),它们具有相同的函数名(尽管实现不同)。第三个模块(C.py)有一个功能,需要A或B中的功能,具体取决于用户选择 第四个模块(D.py)将导入A或B,然后导入C 如何正确设置模块和导入 #模块A.py def write(): 打印('A') #模块B.py def write(): 打印('B') #模块C.py def foo(): 写() #模块D.py(主执行模块) 如果选择: 导入 进口C 其他: 进口B 进口C C.foo() 其实不

我有两个Python模块(例如A.py和B.py),它们具有相同的函数名(尽管实现不同)。第三个模块(C.py)有一个功能,需要A或B中的功能,具体取决于用户选择

第四个模块(D.py)将导入A或B,然后导入C

如何正确设置模块和导入

#模块A.py
def write():
打印('A')
#模块B.py
def write():
打印('B')
#模块C.py
def foo():
写()
#模块D.py(主执行模块)
如果选择:
导入
进口C
其他:
进口B
进口C
C.foo()
其实不多

模块A.py:

def write():
打印('A')
模块B.py

def write():
打印('B')
模块C.py

def foo(选项):
如果选项=='A':
导入
A.写()
elif choice==“b”:
进口B
B.写()
其他:
#随便
模块D.py

choice=input('Enter choice:'))
进口C
C.foo(选择)

这本质上是一个基本的问题。不要执行双重导入并隐式地期望module
C
获得正确的模块,而应该显式地传递适当的选择以供调用

像以前一样使用模块
A
B

# module C.py
def foo(writer):
    writer.write()

# module D.py
import A
import B
import C

if choiceA:
  my_writer = A
elif choiceB:
  my_writer = B

C.foo(my_writer)

如果您选择将
A
B
C
定义为类层次结构而不是模块,则这也将继续以完全相同的方式工作。

我怀疑,您建议的模块映射不是最佳的。使用类层次结构似乎更容易解决这个问题,其中C根据构造函数参数指定适当的类,构造函数参数由用户在D中的选择决定。这是可行的,但样板代码太多了。正如guidot在评论中所建议的那样,使用类可能会更加优雅。是的,但我认为@fabio试图找到一个有效的解决方案,而不是优雅的解决方案。StackOverflow的想法是维护一个问题和答案数据库,供每个人在遇到之前在这里解决的同类问题时使用。因此,你的答案不仅仅是为法比奥,而是为每个人。答案的质量与法比奥的期望无关。我的评论也不仅仅针对你,而是针对每个人,警告说存在更好的解决方案。