Python类与其他类的替换?

Python类与其他类的替换?,python,class,overloading,Python,Class,Overloading,我有一个通用类UsbLib,我想用它作为一个简单的干净API。然而,我希望这个类根据情况变成另一个类 class UsbLib: def __new__(self): if this_is_latest_ubuntu(): return UsbUDisks2() # Doesn't work class UsbUDisks2(UsbLib): def list_devices(): print("Listing de

我有一个通用类
UsbLib
,我想用它作为一个简单的干净API。然而,我希望这个类根据情况变成另一个类

class UsbLib:

    def __new__(self):
        if this_is_latest_ubuntu():
            return UsbUDisks2() # Doesn't work


class UsbUDisks2(UsbLib):

    def list_devices():
        print("Listing devices..")
例如,如果我在Ubuntu中运行下面的代码

lib=UsbLib()
我希望它在内部解决

lib=UsbUDisks2()

我该怎么做呢?

您正在寻找一种称为工厂模式的产品。 简单来说,您不直接实例化类,而是调用一个执行逻辑并返回正确类/对象供您使用的函数

def factory_function():
   if(something):
       return Class1()
   else:
       return Class2()



CC = factory_function()

...
...
或者更妙的是,使用一个公共父级并在该父级中使用静态方法来获得正确的子级

class ClassFather:
   @staticmethod
   def factory():
      if(something):
         return Class1()
      else:
         return Class2()


class Class1(ClassFather): # not really necessary to have inheritance, only if common functionality
   pass 

class Class2(ClassFather): # not really necessary to have inheritance, only if common functionality
   pass

你最好用某种方法

以最简单的形式:

def createUsbLib(params):
   if this_is_latest_ubuntu():
      return UsbUDisks2()
   else:
      return UsbLib()