有条件地导入python类的各个部分

有条件地导入python类的各个部分,python,class,python-module,Python,Class,Python Module,按照的第一个示例,我将类的实现拆分为不同的模块,类似于 class MyClass: from impl0 import foo00, foo01 from impl1 import foo10, foo11 我现在想基于一个仅在实例化时已知的参数,导入某些方法的两个不同实现中的一个或另一个,例如 class MyClass: from impl0 import foo00, foo01 def __init__(self, par): if

按照的第一个示例,我将类的实现拆分为不同的模块,类似于

class MyClass:
    from impl0 import foo00, foo01
    from impl1 import foo10, foo11
我现在想基于一个仅在实例化时已知的参数,导入某些方法的两个不同实现中的一个或另一个,例如

class MyClass:
    from impl0 import foo00, foo01

    def __init__(self, par):
        if par:
            from impl1 import foo10, foo11
        else:
            from alternative_impl1 ipmort foo10, foo11

但是,像前面的代码段中那样操作会将foo10和foo11的可见性限制为仅使用
\uuuu init\uuuu
函数。有没有一种方法可以在类方面实现此功能?

将模块分配给实例(或类)变量:

if par: 
   from impl1 import foo10, foo11
else:
   from impl2 import foo10, foo11
self.foo10 = foo10
self.foo11 = foo11

par
来自哪里?谁在设置它?我想,可能是OP希望我们假设MyClass为MyClass(arg)@LutzHorn:我的意思是,该类是在其他地方用参数初始化的,MyClass在那里使用。对于你的好奇心,PAR是物理模拟中的许多物理参数。用户从命令行传递它们,然后程序实例化类,并将几个参数传递给构造函数。不幸的是,当您这样做时,这些函数将停止作为行为良好的类方法工作,也就是说,您不能将它们称为self.foo10(参数),但您必须使用类似self.foo10(self,parameters)的东西,我想避免。你到底想做什么?条件导入似乎只是其中的一部分。您可以使用
staticmethod
decorator使它们可以使用
self.foo10(参数)
调用。如果期望这些“方法”使用“self”作为第一个参数,则必须将它们从未绑定函数转换为绑定方法。一种简单的方法是更改它们分配给当前作用域的方式,即用类似于
self.foo10=foo10
的东西替换
self.foo10=partial(foo10,self)
使用
partial
from
functools
module.@LutzHorn:我只想做条件导入,不想做更多,因此,不必更改对这些类方法的所有调用。@Guybrush:使用staticmethod会产生错误。但是,您关于使用functools.partial的提示是决定性的。